jenkins+gitlab+webhook 的自动化CICD
摘要:本文主要介绍基于jenkins+gitlab+webhook
的自动化CICD,推荐使用Jenkinsfile
来做流水线配置。
一、插件安装
Generic Webhook Trigger
(推荐使用该方式进行配置,下文将以该插件进行配置)GitLab Hook Plugin
GitLab Plugin
Authentication Tokens API Plugin
description setter
(该插件是描述每次的构建所用)
二、基础项目配置
jenkinsfile
基础代码可以采用代码生成器来生成,后续只需要自己进行微调,代码生成器如下
新建一个流水线项目,打开配置该项目
然后复制如下的
jenkinsfile
文件内容
pipeline { agent any triggers { GenericTrigger( genericVariables: [ [key: 'branch', value: '$.ref'], [key: 'git_http_url', value: '$.repository.git_http_url'], [key: 'commit_message', value: '$.commits[0].message'], [key: 'commit_author_name', value: '$.commits[0].author.name'], [key: 'commit_author_email', value: '$.commits[0].author.email'] ], causeString: 'Triggered on $ref', token: '123456', printContributedVariables: true, printPostContent: true, silentResponse: false ) } stages { stage('Init') { steps { script { branchName = branch.substring("refs/heads/".length()) } } } stage('Build') { steps { script { sh "echo Build" } } } stage('Deploy') { steps { script { sh "echo Deploy" } } } } }复制代码
中间具体的步骤就按照项目类型来进行使用
GenericTrigger
的作用就是把gitlab
传过来的参数中拿取我们想要的参数放到环境变量中,后续可以来使用
如果不想每次提交都进行构建,我们可以指定构建的正则匹配,稍微修改一下
GenericTrigger
,增加了这两个参数,我要提交的message中包含了jenkins才进行构建
regexpFilterExpression: '^.*jenkins.*?$', regexpFilterText: '$.commit_message'复制代码
gitlab
配置
配置上面的URL即可,配置完成后还可以进行推送测试
三、SpringBoot项目测试环境Jenkinsfile
配置
pipeline { agent any environment { APP_CODE = '' APP_VERSION = '' } parameters { string(name: 'APP_CODE', defaultValue: '', description: 'APP编码') string(name: 'APP_VERSION', defaultValue: '', description: 'APP版本') } triggers { GenericTrigger( genericVariables: [ [key: 'branch', value: '$.ref'], [key: 'git_http_url', value: '$.repository.git_http_url'], [key: 'git_ssh_url', value: '$.repository.git_ssh_url'], [key: 'commit_message', value: '$.commits[0].message'], [key: 'commit_author_name', value: '$.commits[0].author.name'], [key: 'commit_author_email', value: '$.commits[0].author.email'] ], causeString: 'Triggered on $ref', token: '123456', printContributedVariables: true, printPostContent: true, silentResponse: false ) } post { always { cleanWs() } } stages { stage('Init') { steps { script { sh "echo Init" branchName = branch.substring("refs/heads/".length()) } } } stage('Build') { steps { script { sh "echo Build" checkout( [ $class: 'GitSCM', branches: [[name: branchName] ], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '', url: '${git_ssh_url}']]] ) sh "/maven/bin/mvn clean package -Dmaven.test.skip=true" // docker打包 } } } stage('Deploy') { steps { script { sh "echo Deploy" // 可以进行ssh上传或者docker或者k8s一件部署,看个人内网需求 } } } } }
作者:昵称为空C
链接:https://juejin.cn/post/7023198325000110094