摘要:本文主要介绍基于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一件部署,看个人内网需求
}
}
}
}
}