使用 Gitlab+Jenkins 實現(xiàn)多分支自動獨立部署


轉(zhuǎn)自:猿話
鏈接:https://www.toutiao.com/i6882749390067499533/
開發(fā)免不了要測試,同一個項目一兩個人開發(fā)的時候,開發(fā)、測試、運維部署一個分支就行,但當(dāng)項目變大,開發(fā)人員變多時,如果還是這樣操作,你可能就會經(jīng)常遇到不同需求的代碼同時測試時的相互干擾問題。比如:
1、合并代碼時經(jīng)常發(fā)生沖突; 2、一人代碼寫錯,影響所有人等。
那么如何解決這個問題呢?
這里我介紹一個多分支同時部署、測試的方案。具體就是每一個開發(fā)者的分支代碼都可以獨立部署到測試服務(wù)器(比如,不同的根目錄,不同的容器),然后,各開發(fā)者可以在各自的測試分支獨立調(diào)試。
下面以PHP項目為例來具體說明。
首先列一下我們可能用到的工具清單:
Linux:這是一切操作的基礎(chǔ),本文中主要用到的Linux版本為Centos8 Gitlab:負(fù)責(zé)管理源代碼 Jenkins:負(fù)責(zé)持續(xù)集成部署, Docker:負(fù)責(zé)搭建Gitlab、Jenkins、Web應(yīng)用。 Nginx:Web應(yīng)用服務(wù)器、反向代理 PHP:解析PHP代碼 GIT:管理源代碼
需要說明的是,我們安裝這些工具主要使用yum命令,因此在執(zhí)行后面步驟前,請先確保你的Linux系統(tǒng)已經(jīng)安裝了yum命令。
具體步驟如下:
1、安裝Docker
yum?install?docker
2、安裝Gitlab
下載Gitlab鏡像:
docker?pull?gitlab-ce
創(chuàng)建Gitlab容器了:
docker?run?--name?gitlab?-p?443:443?-p?80:80?-p?22:22?-v?/data/www/gitlab/config:/etc/gitlab?-v?/data/www/gitlab/logs:/var/log/gitlab?-v?/data/www/gitlab/data:/var/opt/gitlab?gitlab/gitlab-ce?/bin/bash
訪問localhost,查看效果:
3、安裝Jenkins
制作Jenkins鏡像
我們的倉庫代碼是不包含vendor目錄的,需要git checkout 后,使用composer install命令自動生成。由于官方Jenkins鏡像不包含Composer、PHP、Git等我們的PHP項目需要用到的命令,因此,在實際使用時,我們以官方鏡像為基礎(chǔ)制作了自己的Jenkins鏡像。
下載Centos鏡像,如下:
docker?pull?centos:latest
以Centos鏡像為基礎(chǔ)鏡像,創(chuàng)建Jenkins容器:
docker?run?-idt?--name?jenkins?docker.io/centos?/bin/bash
進入jenkins容器內(nèi)部:
docker?exec?-it?jenkins?/bin/bash
使用yum命令安裝java、php、composer、git:
yum?-y?php?git?java
php?-r?"copy('https://getcomposer.org/installer',?'composer-setup.php');"
php?-r?"if?(hash_file('sha384',?'composer-setup.php')?===?'c31c1e292ad7be5f49291169c0ac8f683499edddcfd4e42232982d0fd193004208a58ff6f353fde0012d35fdd72bc394')?{?echo?'Installer?verified';?}?else?{?echo?'Installer?corrupt';?unlink('composer-setup.php');?}?echo?PHP_EOL;"
php?composer-setup.php
php?-r?"unlink('composer-setup.php');"
mv?composer.phar?/usr/bin/composer
如果提示PHP拓展缺失,請使用yum命令安裝相關(guān)拓展。
使用yum命令,安裝官方j(luò)enkins:
wget?-O?/etc/yum.repos.d/jenkins.repo?https://pkg.jenkins.io/redhat/jenkins.repo
rpm?--import?https://pkg.jenkins.io/redhat/jenkins.io.key
yum?install?jenkins
修改Jenkins配置,配置文件默認(rèn)位置為:/etc/sysconfig/jenkins
JENKINS_HOME
JENKINS_USER
JENKINS_PORT
#JENKINS_HOME是Jenkins的主目錄,Jenkins工作的目錄都放在這里,Jenkins儲存文件的地址,Jenkins的插件,生成的文件都在這個目錄下。
#JENKINS_USER是Jenkins的用戶,擁有$JENKINS_HOME和/var/log/jenkins的權(quán)限,一般使用root用戶。
#JENKINS_PORT是Jenkins的端口,默認(rèn)端口是8080。
啟動Jenkins:
service?jenkins?start
如果出現(xiàn)錯誤,可能要考慮文件/etc/init.d/jenkins是否缺少配置,Jenkins的啟動需要Java的支持。
如果Jenkins安裝沒有問題,下面我們就需要設(shè)置開機自啟了。這是為了我們后面創(chuàng)建Jenkins容器的時候,Jenkins可以自動啟動,而不需要我們進入容器中手動啟動。jenkins.sh重啟腳本如下:
給jenkins.sh設(shè)置可執(zhí)行權(quán)限:
chmod?+x?/usr/local/jenkins/jenkins.sh
將文件添加系統(tǒng)自動啟動程序列表:
echo?"/usr/local/jenkins/jenkins.sh">>?/etc/rc.d/rc.local
使用exit命令退出容器,然后使用docker commit命令制作新的Jenkins鏡像:
docker?commit?-m?'Jenkins?with?docker/composer/git/php'?jenkins?jenkins:latest
以新鏡像創(chuàng)建Jenkins容器,如下:
docker?run?-idt?--name?jenkins?-p?8080:8080?-p?50000:50000?-v?/var/run/docker.sock:/var/run/docker.sock?-v?/data/www/jenkins/jenkins_home:/var/lib/jenkins:rw?jenkins?/bin/bash
至此,Jenkins就安裝好了。
4、在Gitlab創(chuàng)建項目
1、設(shè)置access token,記錄生成的秘鑰,后面創(chuàng)建Jenkins任務(wù)需要使用。
2、創(chuàng)建代碼倉庫
3、為代碼倉庫,設(shè)置Webhook
4、在Jenkins創(chuàng)建任務(wù)
在Jenkins中,Jenkins的主要功能都是由一個個插件提供的。因此,在搭建環(huán)境之前我們也需要先安裝幾個用到的插件。

我們用到的插件主要有以下幾個:
GitLab Plugin Gitlab Hook Plugin Gitlab API Plugin ruby-runtime
從名字我們也可以看到,這主要是用于Jenkins與Gitlab的交互。
說明一下,Jenkins與Gitlab的交互包括兩部分:
一部分是Gitlab通過Webhook提交Git Push事件,觸發(fā)Jenkins開始執(zhí)行集成任務(wù), 另一部分是Jenkins通過Git從Gitlab拉取源代碼。
1、配置Gitlab鏈接
這個是Gitlab上創(chuàng)建的access token
2、創(chuàng)建集成任務(wù)

這是gitlab項目的倉庫地址。

3、在本地Push代碼到Gitlab,查看Jenkins任務(wù)執(zhí)行情況
至此,多分支同時部署測試的環(huán)境就搭建好了。
本公眾號全部博文已整理成一個目錄,請在公眾號里回復(fù)「m」獲取! 推薦閱讀:
為何 Linus 一個人就能寫出這么強的系統(tǒng),國人卻做不出來?
5T技術(shù)資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,單片機,樹莓派,等等。在公眾號內(nèi)回復(fù)「1024」,即可免費獲取!!
