Jenkins配置
项目使用Webhook触发,
需要勾选上Push Events
设置Webhook Token
Gitlab配置Webhook
填写上Jenkins上配置的Webhook url和Token
选择标签推送事件,这样打完标签后,就可以触发Jenkins打包构建过程。
Jenkins上获取触发的代码Tag信息
Pipeline模式下。可以方便获取Tag信息。
如何获取Git,GitLab等项目触发到Jenkins的信息呢。如果不想查阅对应的插件文档和源码。
可以使用打印环境变量的方式获取。
如下,打印了所有环境变量。很清楚知道我们想要的是gitlabBranch这个环境变量
Pipeline 脚本
- 先打印所有环境变量
- 获取想要的环境变量,提取想要的环境变量
- 代码 检出
- 打包
- 打镜像
pipeline {
agent any
environment {
GIT_URL = "https://xx.x.xx.demo.git"
GIT_CREDENTIALS_ID = "xx-xx-xxx-xxxxx-xxxxx"
// 触发构建的gitlab tag 获取到的值样例: refs/tags/v0.0.1-test
GITLAB_TAG_NAME=""
// docker镜像标签
DOCKER_IMAGE_TAG=""
}
stages {
// 打印所有环境变量,便于查看触发的Tag是哪个环境变量
stage('Print All Environment') {
steps {
script {
sh 'printenv'
}
}
}
stage('Prepare Gitlab Tag Name') {
steps {
script {
// 获取触发构建的tag
GITLAB_TAG_NAME=env.gitlabBranch
def tagName = GITLAB_TAG_NAME.replace("refs/tags/", "")
DOCKER_IMAGE_TAG=tagName
echo "Triggered by GitLab tag: ${GITLAB_TAG_NAME}"
echo "Setting DOCKER IMAGE TAG to ${DOCKER_IMAGE_TAG}"
}
}
}
stage('git checkout') {
steps {
checkout([$class: 'GitSCM', branches: [[name: "${GITLAB_TAG_NAME}"]],
userRemoteConfigs: [[credentialsId: "${GIT_CREDENTIALS_ID}", url: "${GIT_URL}"]]
])
}
}
stage('maven build') {
steps {
script{
sh "mvn clean package"
}
}
}
stage('docker build') {
steps {
script{
sh "docker build --no-cache -t harbor.registry.com/demo/xxx:${DOCKER_IMAGE_TAG} ."
}
}
}
}
}