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