? ?gitlab有webhook和gitlab-ci實(shí)現(xiàn)自動(dòng)部署忘闻,我這邊選擇了gitlab-ci搭建自動(dòng)部署(能過(guò)通過(guò)shell的運(yùn)行實(shí)現(xiàn)更多的運(yùn)維等操作), 因?yàn)槭莿傞_(kāi)始接觸這個(gè)自動(dòng)部署的實(shí)現(xiàn)? 所以暫時(shí)通過(guò) 寶塔中的gitlab來(lái)實(shí)現(xiàn),后期會(huì)再發(fā)布一篇關(guān)于 oneinstack環(huán)境下實(shí)現(xiàn)的高版本gitlab實(shí)現(xiàn)自動(dòng)部署的文章处窥,盡情期待!
步驟:
? ? 1雹仿、因?yàn)槲沂鞘褂脤毸惭b的gitlab8.8.5版本 所以安裝gitlab這一部分 大家在簡(jiǎn)書(shū)中搜索增热,有很多.(注意!, gitlab-runner 有對(duì)應(yīng)的版本的,請(qǐng)選擇對(duì)應(yīng)版本胧辽,否則安裝會(huì)失斁稹),我這里安裝的是 gitlab-runner 1.11.2? centos7.3下部署
? ? 2、下載gitlab-ci-multi-runner 1.11.2
? ? ? ? ? $ sudo wget? https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/v1.11.2/binaries/gitlab-ci-multi-runner-linux-amd64
? ? ? ? ? 給這個(gè)文件權(quán)限
? ? ? ? ? $ sudo chmod +x? ? ./gitlab-ci-multi-runner-linux-amd64
? ? 3邑商、創(chuàng)建一個(gè)centos用戶
? ? ? ? ? ? sudo useradd --comment 'GitLab Runner' --create-home? gitlab-runner --shell? /bin/bash
? ? 4摄咆、注冊(cè)一個(gè)ci (在 gitlab-ci-multi-runner-linux-amd64 文件所在目錄下執(zhí)行如下命令)
? ? ? ? ? ? sudo? ./gitlab-ci-multi-runner-linux-amd64? register
? ? ? ? ? ? 按照如下配置:
? ? 5奠骄、安裝并作為服務(wù)啟動(dòng)
? ? ? ? ? ? sudo gitlab-ci-multi-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner? (加黑部分為指定build文件夾目錄存放位置)
? ? ? ? ? ? sudo gitlab-ci-multi-runner start
? ? 6豆同、開(kāi)放對(duì)應(yīng)項(xiàng)目目錄權(quán)限給 gitlab-runner用戶(我這里是php項(xiàng)目組 所以統(tǒng)一將所有php相關(guān)項(xiàng)目放到了php目錄,這里修改為你們自己的項(xiàng)目總目錄或者單獨(dú)目錄都可以)
? ? ? ? sudo chown -hR gitlab-runner:gitlab-runner? /www/wwwroot/php
? ? 7含鳞、接下來(lái)就是重點(diǎn)了!
? ? ? ? 在centos中 進(jìn)入到gitlab-runner用戶? 生成ssh 實(shí)現(xiàn)免登陸 克隆或者拉取項(xiàng)目代碼,命令如下:
? ? ? ? $ su gitlab-runner
? ? ? ? $ mkdir ~/.ssh
? ? ? ? $cd~/.ssh
? ? ? ? $ ssh-keygen
? ? ? ? # 提示輸入一直按回車(chē)默認(rèn)就可以了
? ? ? ? $ cat id_rsa.pub? 然后將 ssh內(nèi)容復(fù)制下來(lái), 粘貼到 gitlab編輯中的部署密鑰,如下圖
8影锈、在gitlab 注冊(cè)一個(gè)gitlab-runner用戶 然后將該用戶 加入到需要自動(dòng)部署的項(xiàng)目中(加入項(xiàng)目成員中)
9、接下來(lái)就是自動(dòng)部署時(shí) 執(zhí)行的shell腳本的編寫(xiě)了蝉绷,命令如下
? ? su gitlab-runner
? ? cd ~
? ? mkdir bin
? ? cd bin/
? ? vim deployscript
? ? 內(nèi)容如下圖:
? ? ? ? ? ? 上圖是 代碼自動(dòng)拉取的 shell代碼鸭廷,$1 $2 $3 $4 分別代表:?
? ? ? ? ? ? ? ? $1 : php(項(xiàng)目所屬群組, 比如說(shuō)公司有php和java 那么php放在php群組 java則放在java群組 這樣的話項(xiàng)目管理就很方便了)
? ? ? ? ? ? ? ? $2: 項(xiàng)目名稱,
? ? ? ? ? ? ? ? $3: git分支名稱 推薦 develop分支
? ? ? ? ? ? ? ? $4: 當(dāng)前job名稱 這里為 job1
10、給予 deployscript文件執(zhí)行權(quán)限 (4 2 1 中的1 也就是 x)
? ? ? ? ? ? chmod +x deployscript
11熔吗、接下來(lái)就是 配置(/home/gitlab-runner/bin)環(huán)境變量了,用于不用每次執(zhí)行 bin下的腳本時(shí) 都指定 /home/gitlab-runner/bin 這個(gè)目錄 也考慮到安全吧(這一塊不是很懂哈辆床,萌新在此!)? 如下圖:
? ? ? ? ? ? 命令如下:
? ? ? ? ? gitlab-runner用戶下
? ? ? ? ? ? ? ? su gitlab-runner
? ? ? ? ? ? ? ? cd ~
? ? ? ? ? ? ? ? vim .bash_profile
? ? ? ? ? ? ? ? PATH修改為如下:
? ? ? ? ? ? ? ? ? ? PATH=$PATH:$HOME/.local/bin:$HOME/bin:/home/gitlab-runner/bin? ? (加黑加粗部分為修改內(nèi)容)
? ? ? ? ? ? ? ? 保存退出? 執(zhí)行 source? .bash_profile (環(huán)境變量即為生效)
? ? ? ? ? ? root用戶下:
? ? ? ? ? ? vim /etc/profile
? ? ? ? ? ? ? ? 在底部修改 PATH為:
? ? ? ? ? ? ? ? ? ? export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/git/bin:/home/gitlab-runner/bin
? ? ? ? ? ? ? ? 保存退出? 執(zhí)行 source /etc/profile
## 注意! ##
所有的項(xiàng)目 都是在 php群組 中創(chuàng)建? 如果沒(méi)有php群組? 創(chuàng)建一個(gè)即可
之后的項(xiàng)目都在php群組下 創(chuàng)建!!!
12、針對(duì)于tp或者laravel 拉取代碼后 composer install 之后 vendor目錄 此時(shí)的擁有者為 root 需要修改為 gitlab-runner否者后期想實(shí)現(xiàn)自動(dòng)composer install /update時(shí)? 會(huì)因?yàn)闆](méi)有權(quán)限執(zhí)行不了
? ? ? ? chown -R gitlab-runner:gitlab-runner? vendor/? (root用戶下執(zhí)行)
13桅狠、接下來(lái)就是 gitlab-ci.yml文件的編寫(xiě)了,如下:
# Author:xuweitao 2019-05-07 01:22:00
# php項(xiàng)目:GitLab-CI自動(dòng)執(zhí)行腳本
#
# http://www.reibang.com/p/c566265d39de
# /home/gitlab-runner/bin
variables:
? G_LARAVEL_INIT: 'true'
stages:
? - deploy
? - laravel-init
? - composer-install
job1:
? # 代碼自動(dòng)更新部署 運(yùn)行shell腳本
? stage: deploy
? only:
? ? - develop
? script:
? ? - deployscript php $CI_PROJECT_NAME $CI_COMMIT_REF_NAME $CI_JOB_NAME1
job2:
? # 隊(duì)列開(kāi)啟 & 項(xiàng)目初始化(vender目錄跟 storage以及軟連接等的執(zhí)行和授權(quán),注意: 項(xiàng)目初始化之前 請(qǐng)確保先執(zhí)行了 composer install操作!!!)? 運(yùn)行shell腳本
? stage: laravel-init
? only:
? ? - develop
? variables:
? ? B_LARAVEL_init: 'false'
? ? B_LARAVEL_QUEUE: 'false'
? script:
? ? - laravel-init php $CI_PROJECT_NAME $B_LARAVEL_init $B_LARAVEL_QUEUE $CI_JOB_NAME2
job3:
? # composer install? 運(yùn)行shell腳本
? stage: composer-install
? only:
? ? - develop
? variables:
? ? B_COMPOSER_INSTALL: 'false'
? script:
? ? - composer-install php $CI_PROJECT_NAME $B_COMPOSER_INSTALL $CI_JOB_NAME3
? ? step13 參數(shù)介紹:?
????????php? 表示 gitlab 群組名稱,也就是所有的php項(xiàng)目 都放在php群組方便管理 我代碼也是基于這個(gè)群組實(shí)現(xiàn)!
? ???????$CI_PROJECT_NAME 表示當(dāng)前項(xiàng)目名稱 (需要在對(duì)應(yīng)的項(xiàng)目 變量里面添加)
? ??????$CI_COMMIT_REF_NAME 表示當(dāng)前代碼默認(rèn)推送到git那個(gè)分支? ?默認(rèn)為develop分支?(需要在對(duì)應(yīng)的項(xiàng)目 變量里面添加)
? ??????$CI_JOB_NAME1 讼载、$CI_JOB_NAME2 、$CI_JOB_NAME3? 手動(dòng)添加job1中跌、job2咨堤、job3名稱? ?(需要在對(duì)應(yīng)的項(xiàng)目 變量里面添加)
(由于是gitlab 8.8.5 版本太低? 不會(huì)自動(dòng)給我們添加 job1~3? 等變量 所以需要自己在對(duì)應(yīng)的項(xiàng)目添加一邊!)
參考鏈接: http://www.reibang.com/p/b1e098cdb46b
參考鏈接: http://www.reibang.com/p/df433633816b
參考鏈接: https://www.cnblogs.com/whoamme/p/4039998.html
最后再說(shuō)一句: 新建一個(gè)項(xiàng)目的時(shí)候, 只需要在 對(duì)應(yīng)的群組(我這里是 php群組) 中創(chuàng)建新的項(xiàng)目操作步驟:
? ? (1)、點(diǎn)擊新項(xiàng)目設(shè)置 -> runner ->然后按照上面的 第4點(diǎn) 執(zhí)行? ?
? ? (2)漩符、將gitlab-ci.yml原封不動(dòng)復(fù)制一封放到新項(xiàng)目根目錄即可
總結(jié): 過(guò)程總會(huì)遇到坑的一喘,這時(shí)候就得看你解決問(wèn)題的能力了。先通過(guò)報(bào)錯(cuò)去嘗試修改 實(shí)在不行再進(jìn)行百度/谷歌嗜暴。 關(guān)于shell腳本 我就不全部貼出來(lái)了? 畢竟該走的坑還是要走一邊凸克。 通過(guò)這個(gè)實(shí)例? 也了解了shell的一些基礎(chǔ)語(yǔ)法和使用? 收獲還是滿大的议蟆。