基于gitlab的webhook集成jenkins,并在gitlab流水线中展示jenkins的job状态信息

1. 环境信息

gitlab服务器: 4C8G

  • 系统OS:Ubuntu 22.04.3 LTS
  • gitlab:gitlab-jh-16.6

jenkins服务器: 4C8G

  • jenkins : Version 2.426.1
  • jenkins Plugin - GitLab Plugin:1.7.16
  • Docker:version 25.0.0-beta.1, build 2b521e4

2. gitlab 部署

3. jenkins部署

本案例基于docker部署jenkins,并安装GitLab Plugin,安装操作如下:

mdkir /home/ubuntu/jenkins_home
chown -R 1000:1000 /home/ubuntu/jenkins_home
docker pull jenkins/jenkins:latest
docker tag jenkins/jenkins:latest jenkins/jenkins:2.426.1
docker run -itd -p 8080:8080  --restart=always --name=jenkins -v /home/ubuntu/jenkins_home/:/var/jenkins_home jenkins/jenkins:2.426.1

4. gitlab集成jenkins

4.1 jenkins的凭据上保存gitlab的账号信息

可以是用户名和密码,也可以是个人token,建议两个都保存下即可,后面会有用到。
在这里插入图片描述

4.2 jenkins中配置gitlab的连接信息

此处需要gitlab的令牌token,并需要通过`Test Connection
在这里插入图片描述

4.3 编写jenkins上pipeline文件

updateGitlabCommitStatus 可以将jenkins的构建信息写到gitlab的流水线中

pipeline {
    agent any

    stages {
        stage('pull code') {
            steps {
                script{
                    try{
                        updateGitlabCommitStatus name: 'code-checkout', state: 'running'
                        git branch: 'master', credentialsId: 'gitlab', url: 'http://192.168.31.100/ops/spring.git'
                        sh ''' env '''
                        updateGitlabCommitStatus name: 'code-checkout', state: 'success'
                    } catch (e) {
                        updateGitlabCommitStatus name: 'code-checkout', state: 'failed'
                    }
                }
            }
        }
        stage('build') {
            steps {
                script{
                    try{
                        updateGitlabCommitStatus name: 'code-build', state: 'running'
                        sh '''
                        ls -l
                        sleep 10
                        env
                        '''
                        updateGitlabCommitStatus name: 'code-build', state: 'success'
                    } catch (e) {
                        updateGitlabCommitStatus name: 'code-build', state: 'failed'
                    }
                }
            }
        }
        stage('test') {
            steps {
                script{
                    try{
                        updateGitlabCommitStatus name: 'code-test', state: 'running'
                        sh '''
                        ls -l
                        sleep 20
                        env
                        '''
                        updateGitlabCommitStatus name: 'code-test', state: 'success'
                    } catch (e) {
                        updateGitlabCommitStatus name: 'code-test', state: 'failed'
                    }
                }
            }
        }
        stage('deploy') {
            steps {
                script{
                    try{
                        updateGitlabCommitStatus name: 'code-deploy', state: 'running'
                        sh '''
                        ls -l
                        sleep 30
                        env
                        '''
                        updateGitlabCommitStatus name: 'code-deploy', state: 'success'
                    } catch (e) {
                        updateGitlabCommitStatus name: 'code-deploy', state: 'failed'
                    }
                }
            }
        }
    }
}

4.4 jenkins上创建pipeline项目

项目的描述信息
在这里插入图片描述
选择Build when a change is pushed to GitLab-pened Merge Request Events
在这里插入图片描述
点击Generate,并记录Secret token
在这里插入图片描述
将pipeline文件里面的信息粘贴进去
在这里插入图片描述

4.5 gitlab上配置webhooks事件

选择你需要配置的项目 - 设置 - webhooks - 添加

在这里插入图片描述
webhooks的测试
在这里插入图片描述

4.6 测试

由于jenkins上的Build Triger 我们选择的是Build when a change is pushed to GitLab-pened Merge Request Events,因为我们可以创建一个mr来触发

此图为展示效果图,主要展示流水线再mr创建后,通过webhooks将mr的信息发送给jenkins,然后jenkins构建job,并将job的信息返回给gitlab,所以可以gitlab侧看到jenkins中的job的信状态息。
在这里插入图片描述
流水线的运行和webhooks的触发
在这里插入图片描述
在这里插入图片描述
可以在gitlab的pipeline上看到jenkins的构建信息
在这里插入图片描述

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-07 16:52:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-07 16:52:02       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-07 16:52:02       82 阅读
  4. Python语言-面向对象

    2023-12-07 16:52:02       91 阅读

热门阅读

  1. TCP聊天

    TCP聊天

    2023-12-07 16:52:02      55 阅读
  2. 考研英语语法(十六)

    2023-12-07 16:52:02       57 阅读
  3. 数据库含EXISTS的查询

    2023-12-07 16:52:02       57 阅读
  4. 英伟达将在日本建立AI工厂网络

    2023-12-07 16:52:02       74 阅读
  5. 【学习笔记】插值之拉格朗日插值(Lagrange)

    2023-12-07 16:52:02       54 阅读
  6. ElasticSearch之cat master API

    2023-12-07 16:52:02       60 阅读
  7. 使用不同方法对时间表变量进行重采样和同步

    2023-12-07 16:52:02       52 阅读
  8. 在Azure虚拟机中使用XDP Native模式

    2023-12-07 16:52:02       61 阅读
  9. React-hook-form-mui(五):包含内嵌表单元素的表单

    2023-12-07 16:52:02       51 阅读