實戰一:基於Jenkins搭建觸發器
構建觸發器介紹
構建觸發器( 有的人稱為鈎子 實際上是 一個HTTP回調其用於在開發人員向gitlab提交代碼后能夠觸發jenkins自動執行代碼構建操作。
以下為新建一個開發分支,只有在開發人員向開發 develop 分支提交代碼的時候才會觸發代碼構建,而向主分支提交的代碼不會自動構建,需要運維人員手動部署代碼到生產環境。
1、在Gitlab創建develop分支
1、在Gitlab網頁上創建的web1項目內創建一個develop分支

2、開始創建develop分支

2、在Jenkins上安裝插件並進行配置
1、在jenkins網頁的jenkins---->系統管理---->插件管理,進行安裝gitlab相關插件。

2、修改jenkins登陸認證方式:系統管理---->全局安全配置,修改完成后,需要在linux系統上重啟jenkins服務:systemctl restart jenkins,由於jenkins非常消耗內存,生產中最少8G起步。
注意事項:https://jenkins.io/security/advisory/2018-05-09/#SECURITY-263
- 認證改為登陸用戶可以做任何事
- 取消跨站請求偽造保護
- Gitlab Hook Plugin 以純文本形式存儲和顯示 GitLab API 令牌

3、在Jenkins網頁上創建一個develop job項目,也可以使用之前的的linux-jobs項目,在jenkins主頁--->New任務進行創建新的項目。

4、創建源代碼管理,可伶gitlab主機的代碼及develop分支

5、配置構件Jenkins觸發器,生成自定義的token值
(1)先隨機生成12位的隨機數
[root@gitlab ~]# openssl rand -hex 12 046e1cb057bce8073a7eddca
(2)將生成的隨機數填到jenkins指定的配置觸發器,先設置一個測試的執行shell命令

6、此時過濾一下之前自定義的token值,就可以看到在指定的/var/lib/jenkins/jobs/linux-job1-develop/config.xml文件中存放
[root@jenkins ~]# grep 046e1cb057bce8073a7eddca /var/lib/jenkins/ -R grep: /var/lib/jenkins/jobs/linux-jobs/builds/lastUnstableBuild: No such file or directory grep: /var/lib/jenkins/jobs/linux-job1-develop/builds/lastSuccessfulBuild: No such file or directory grep: /var/lib/jenkins/jobs/linux-job1-develop/builds/lastStableBuild: No such file or directory grep: /var/lib/jenkins/jobs/linux-job1-develop/builds/lastFailedBuild: No such file or directory grep: /var/lib/jenkins/jobs/linux-job1-develop/builds/lastUnstableBuild: No such file or directory grep: /var/lib/jenkins/jobs/linux-job1-develop/builds/lastUnsuccessfulBuild: No such file or directory /var/lib/jenkins/jobs/linux-job1-develop/config.xml: <authToken>046e1cb057bce8073a7eddca</authToken>

7、在jenkins主機上執行命令測試,或者在網頁上訪問,然后在jenkins控制台查看job是否正常執行,此時是藍色,說明正常運行,如果是紅色,說明運行失敗
[root@jenkins ~]# curl http://192.168.7.101:8080/job/linux-job1-develop/build?token=046e1cb057bce8073a7eddca

3、在gitlab網頁上創建系統鈎子
1、在gitlab網頁上創建鈎子

2、對創建的鈎子進行測試,返回201,說明創建的系統鈎子沒問題

3、返回值為HTTP 201,說明正常

4、開始測試Jenkins在Gitlab拉取代碼到后端服務器
1、先將jenkins拉取gitlab網站代碼的shell腳本添加到 linux-job1-develop項目下,后端服務器是192.168.7.104,/data/tomcat/tomcat_appdir目錄下存放的是壓縮文件,/data/tomcat/tomcat_webdir/myapp目錄下存放的問訪問代碼:
cd /var/lib/jenkins/workspace/linux-job1-develop tar cf code.tar.gz index.html scp code.tar.gz www@192.168.7.104:/data/tomcat/tomcat_appdir/ ssh www@192.168.7.104 "/apps/tomcat/bin/shutdown.sh && rm -rf /data/tomcat/tomcat_webdir/myapp/* && cd /data/tomcat/tomcat_appdir/ && tar xf code.tar.gz -C /data/tomcat/tomcat_webdir/myapp/" ssh www@192.168.7.104 "/apps/tomcat/bin/startup.sh"

2、先在gitlab主機上將develop分支的代碼拉取下來進行修改,然后再傳到gitlab倉庫
[root@gitlab ~]# git clone -b develop http://192.168.7.100/linux_gitlab/web1.git # -b 指定要拉取代碼的分支,克隆http的地址才能將代碼提交,而克隆git代碼是不能提交待gitlab倉庫的 [root@gitlab web1]# cd web1/ # 切換到拉取代碼的目錄下 [root@gitlab web1]# cat index.html #將代碼文件進行修改 linux web 192.168.7.100 linux web 192.168.7.100 [root@gitlab web1]# git config --global user.name "root" #第一次提交代碼時,需要指定登陸用戶名,后面提交可不需要登錄 [root@gitlab web1]# git config --global user.email 974212253@qq.com # 第一次需要指定郵箱地址 [root@gitlab web1]# git add index.html # 添加代碼 [root@gitlab web1]# git commit -m "v2" #將代碼提交gitlab倉庫上 [root@gitlab web1]# git push # 將代碼上傳待gitlab上 warning: push.default is unset; its implicit value is changing in Git 2.0 from 'matching' to 'simple'. To squelch this message and maintain the current behavior after the default changes, use: git config --global push.default matching To squelch this message and adopt the new behavior now, use: git config --global push.default simple See 'git help config' and search for 'push.default' for further information. (the 'simple' mode was introduced in Git 1.7.11. Use the similar mode 'current' instead of 'simple' if you sometimes use older versions of Git) Username for 'http://192.168.7.100': root Password for 'http://root@192.168.7.100': Counting objects: 5, done. Writing objects: 100% (3/3), 254 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) remote: remote: To create a merge request for develop, visit: remote: http://192.168.7.100/linux_gitlab/web1/merge_requests/new?merge_request%5Bsource_branch%5D=develop remote: To http://192.168.7.100/linux_gitlab/web1.git 429d346..1b28d52 develop -> develop # 一開始克隆的是develop分支,默認提交的就是develop分支
3、在gitlab網頁上查看此時傳到develop分支的代碼信息

4、當我們將代碼傳待gitlab時,此時jenkins就會自動拉取gitlab網站上的代碼,打開jenkins控制台,可以看到jenkins的shell腳本全部執行完畢

5、訪問此時keepalived的VIP地址192.168.7.248/myapp,此時可以訪問到jenkins拉取gitlab的代碼內容

構建后項目關聯(根據需求來操作)
用於多個job相互關聯,需要執行多個job的場景,例如以下:將linux-job1-develop當做測試環境,linux-jobs當做是生產環境,當測試環境執行成功之后,直接就會拉取代碼到生產環境中
1、配置構建后的操作,當linux-job1-develop項目執行完畢后,就會執行添加的linx-jobs項目,且執行的命令都會發送到自己添加的郵箱中。

2、開始測試效果,當執行了linux-job1-develop項目成功之后,就會自定構建linux-jobs項目

3、此時訪問后端服務器網頁:192.168.7.248/myapp,訪問的就是linux-jobs拉取的代碼內容

Jenkins分布式
1、Jenkins分布式介紹
在眾多Job的場景下,單台 jenkins master同時執行代碼clone、編譯、打包及構建其性能可能會出現瓶頸從而會影響代碼部署效率,官方提供了jenkins分布式構建,將眾多job分散運行到不同的jenkins slave節點,大幅提高並行job的處理能力。
2、安裝部署jenkins-slave服務器
1、安裝並配置jenkins服務:詳情見:https://www.cnblogs.com/struggle-1216/p/12387377.html
Jenkins官方下載地址:https://jenkins.io/zh/
官方下載JDK地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
[root@jenkins-slave src]# yum install jenkins-2.164.3-1.1.noarch.rpm -y # vim /etc/sysconfig/jenkins # 修改jenkins配置文件 JENKINS_USER="root" #將jenkins以root身份啟動 JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -server -Xms1g -Xmx1g -Xss512k -Xmn1g \ -XX:CMSInitiatingOccupancyFraction=65 \ -XX:+UseFastAccessorMethods \ -XX:+AggressiveOpts -XX:+UseBiasedLocking \ -XX:+DisableExplicitGC -XX:MaxTenuringThreshold=10 \ -XX:NewSize=2048M -XX:MaxNewSize=2048M -XX:NewRatio=2 \ -XX:PermSize=128m -XX:MaxPermSize=512m -XX:CMSFullGCsBeforeCompaction=5 \ -XX:+ExplicitGCInvokesConcurrent -XX:+UseConcMarkSweepGC -XX:+UseParNewGC \ -XX:+CMSParallelRemarkEnabled -Djava.awt.headless=true \ -Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port=12345 \ -Dcom.sun.management.jmxremote.authenticate=false \ -Dcom.sun.management.jmxremote.ssl=false \ -Djava.rmi.server.hostname="192.168.7.103"" #寫入本機的I地址
2、啟動jenkins-slave服務
[root@jenkins-slave ~]# systemctl start jenkins
3、開始訪問jenkins-slave網頁進行初始化的操作配置:192.168.7.103:8080,創建一個登陸jenkins登陸賬號,具體安裝部署步驟見:https://www.cnblogs.com/struggle-1216/p/12387377.html

3、配置JAVA的jenkins-slave節點的java環境
1、配置 Jenkins-slave節點java環境
(1)Slave 服務器創建工作目錄 如果slave需要執行編譯job,則也需要配置java環境並且安裝 git、svn、maven 等 與 master 相同的基礎運行環境,另外也要創建 與 master 相同的數據目錄,因為腳本中調用的路徑只有相對一 master 的一個路徑,此路徑在master 與各 node 節點必須保持一致。
[root@jenkins-slave ~]# mkdir /var/lib/jenkins -p # 在jenkins從服務器上創建和主服務器拉取代碼目錄一致 [root@jenkins src]# scp jdk-8u212-linux-x64.tar.gz 192.168.7.103:/usr/local/src #將主jenkins服務器的JDK文件傳到從服務器上 [root@jenkins-slave src]# tar xvf jdk-8u212-linux-x64.tar.gz # 在jenkins從服務器上將JDK包解壓 [root@jenkins-slave src]# ln -sv /usr/local/src/jdk1.8.0_212/ /usr/local/jdk # 在從服務器上對JDK創建軟鏈接 ‘/usr/local/jdk’ -> ‘/usr/local/src/jdk1.8.0_212/’ [root@jenkins-slave src]# ln -sv /usr/local/jdk/bin/java /usr/bin/java # 將java執行程序也創建一個軟鏈接,否則jenkins無法啟動
(2)定義JAVA環境變量/etc/profile
export HISTTIMEFORMAT="%F %T `whoami`" export export LANG="en_US.utf-8" export JAVA_HOME=/usr/local/jdk export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin [root@jenkins-slave src]# . /etc/profile # 使環境變量生效 [root@jenkins-slave src]# java -version # 查看此時的JAVA版本,能運行java命令即可 java version "1.8.0_212" Java(TM) SE Runtime Environment (build 1.8.0_212-b10) Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
4、開始添加jenkins-slave節點
1、在jenkins--->系統管理--->節點管理---->新建節點,創建一個jenkins-node1名稱

2、添加jenkins-slave信息

3、添加jenkins的憑證提供者

5、jenkins-slave主機的最終信息

6、查看jenkins-node1節點的日志,此時可以看到slave節點的jenkins已經正常運行了。


7、查看slave同步狀態,已經同步正常

8、解決jenkins-slave運行的日志未發現java目錄問題,在jenkins-slave機器上創建目錄
[root@jenkins-slave ~]# mkdir /var/lib/jenkins/jdk/bin -p # 創建一個目錄 [root@jenkins-slave ~]# ln -s /usr/local/jdk/bin/java /var/lib/jenkins/jdk/bin # 將存放java的文件目錄創建軟鏈接指向新建的目錄即可
9、此時再次看jenkins-node1日志,此處找不到目錄就已經解決了。

10、如果再想添加一個新的node節點,只需要復制jenkins-node1的模板即可,在里邊修改IP地址和名稱等信息即可,在這里就不再演示了。

