Gitlab自动触发流水线

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,点击右上角用户图标,选择【偏好设置】,左侧会出现用户设置导航;点击【访问令牌】,按表单内容填写令牌内容。

注意:令牌无法找回,记得保存。
Gitlab自动触发流水线

配置凭据

打开Jenkins。

【系统管理】->【Manage Credentials】->【Stores scoped to Jenkins】创建全局凭证,左侧导航有【添加凭据】字样,点击,类型选择“GitLab API token”。
Gitlab自动触发流水线
Gitlab自动触发流水线

生成凭据后还要去全局配置里让凭据生效
Gitlab自动触发流水线

点击Testconnection 测试是否成功,按钮右端会出现“success”字样。

创建流水线

打开Blue Ocean,创建流水线
Gitlab自动触发流水线

填写相关信息
Gitlab自动触发流水线

流水线创建完毕。注意此处使用最简单的账号密码方式。

配置订阅地址

接下来是获取Jenkins订阅地址,再配置到Gitlab上。

回到Jenkins的Dashboard界面,进入流水线内部。点击单条流水线。
Gitlab自动触发流水线

查看配置
Gitlab自动触发流水线

拷贝地址
Gitlab自动触发流水线

回到Gitlab,进入对应项目,点击左侧导航的怕【设置】->【webhook】
Gitlab自动触发流水线

配置网址即可。

触发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
上一篇:Git配置教程:在一台设备上同时配置github和gitlab的SSH


下一篇:异常处理