Gitlab自動觸發流水線
我們希望版本管理工具和持續集成工具聯動起來,如提交代碼時,自動觸發集成工具的進行代碼監測,檢測成功后集成工具再通知版本管理工具進行下一步操作。
Jenkins
會為當前代碼庫生成一個訂閱地址,綁定到Gitlab
。而Jenkins
想調用Gitlab
想調用Gitlab
的API則需要其憑證信息。
所以我們配置自動觸發流水線最關鍵兩步是把憑證添加到Jenkins上,再將訂閱地址綁定到Gitlab上。
使用Gitlab Hook Plugin插件
安裝插件,【系統管理】->【插件管理】安裝“Gitlab hook plugin”、“git plugin”。
注意,此插件依賴ruby-runtime環境,如果使用最新版本Jenkins鏡像,JDK版本過高會導致環境安裝失敗。可參考問題1偷換容器的JDK解決。
初始化項目
本地用vue-cli創建一個工程,添加Jenkinsfile。
pipeline {
agent any
stages {
stage("stage 1: Test auto exe pipline") {
steps {
echo 'Test auto exe pipline'
sh 'echo ${BRANCH_NAME}'
}
}
}
post {
always {
echo 'This will always run'
sh "env"
}
success {
echo 'successful'
}
failure {
echo 'failed'
}
}
}
gitlab創建空白項目(不要初始化任何文件,否則要同步代碼),本地工程根目錄執行以下命令提交到代碼庫。
git remote add origin http://xxxxx.git
git branch -M main
git add .
git commit -m 'init project.'
git push -u origin main
配置Gitlab憑據
獲取Gitlab憑證
登陸了Gitlab,點擊右上角用戶圖標,選擇【偏好設置】,左側會出現用戶設置導航;點擊【訪問令牌】,按表單內容填寫令牌內容。
注意:令牌無法找回,記得保存。
配置憑據
打開Jenkins。
【系統管理】->【Manage Credentials】->【Stores scoped to Jenkins】創建全局憑證,左側導航有【添加憑據】字樣,點擊,類型選擇“GitLab API token”。
生成憑據后還要去全局配置里讓憑據生效
點擊Testconnection 測試是否成功,按鈕右端會出現“success”字樣。
創建流水線
打開Blue Ocean,創建流水線
填寫相關信息
流水線創建完畢。注意此處使用最簡單的賬號密碼方式。
配置訂閱地址
接下來是獲取Jenkins訂閱地址,再配置到Gitlab上。
回到Jenkins的Dashboard界面,進入流水線內部。點擊單條流水線。
查看配置
拷貝地址
回到Gitlab,進入對應項目,點擊左側導航的怕【設置】->【webhook】
配置網址即可。
觸發gitlab push事件。
附錄
問題1:Failed to load: Gitlab Hook Plugin (1.4.2) --Plugin is missing: ruby-runtime (0.12)
安裝gitlab hook plugin報錯。
最開始我用的是jenkins/blueocean
鏡像,安裝ruby-runtime時報一個window錯,網上說安裝路徑帶了中午或特殊字符,但我系統用的是Ubuntu,顯然不是這個問題。
后來刪了容器,用jenkins/jenkins:lts
和上次相同的參數創建容器,再次安裝,報ruby-runtime: unsupported Java version: 11
。我的Java11版本太高,要下載一個低版本JDK,替換掉容器里的JDK,裝好ruby-runtime環境后再將原來JDK替換回去。
博客原文:docker jenkins 容器ruby-runtime插件安裝失敗解決辦法
docker exec -it jenkins bash
java -version # openjdk version "11.0.12" 2021-07-20
whereis java # java: /opt/java/openjdk/bin/java
下載jdk-8
,替換
#在主機上下載,openjdk8,再將其拷貝進容器內
wget https://builds.openlogic.com/downloadJDK/openlogic-openjdk/8u262-b10/openlogic-openjdk-8u262-b10-linux-x64.tar.gz
docker cp openlogic-openjdk-8u262-b10-linux-x64.tar.gz jenkins:/usr/local
docker exec -it jenkins bash
tar -xvf openlogic-openjdk-8u262-b10-linux-x64.tar.gz
mv openlogic-openjdk-8u262-b10-linux-64/ jdk8
whereis java
mv /opt/java/openjdk/bin/java /opt/java/openjdk/bin/java.bak
ln -s /usr/local/jdk8/bin/java /opt/java/openjdk/bin/java
替換完成之后再把java11換回去
rm -f /opt/java/openjdk/bin/java
mv /opt/java/openjdk/bin/java.bak /opt/java/openjdk/bin/java