每期一个小窍门: jenkins 生产环境流水线 标准构建方案
Jenkins 生产线 的比较正规的流水线解决方案
·
下拉菜单选择镜像 retag为release
具体就是获取build列表
retag为release
同时tag到git release
最终执行 kubectl set image
pipeline {
agent {
node {
label 'prod01'
}
}
environment {
dockerServer="tcp://10.0.x.x:2375"
dockerRegistry="https://xx.xx.com"
dockerRegistryCredentialsId="harbor-ci-jenkins"
releaseImage="xx"
repository="https://xx.git"
repositoryCredentialsId="gitlab-jenkins-fetchxxx" // 这里填写jenkins的账号
}
parameters {
imageTag(
name: 'DOCKER_IMAGE',
description: '请选择待发布的版本',
image: 'xxx',
filter: '.*',
defaultTag: '',
registry: 'https://xxx', // 私有仓库地址
credentialId: 'harbor-ci-jenkins',
tagOrder: 'NATURAL'
)
string(
name: 'RELEASE_TAG',
defaultValue: '',
description: '请输入生产环境对应的版本号'
)
}
stages {
stage('user choice') {
steps {
echo "build node : ${NODE_NAME}"
echo "jenkins workspace: ${WORKSPACE}"
echo "DOCKER_IMAGE : ${DOCKER_IMAGE}"
echo "RELEASE_TAG : ${RELEASE_TAG}"
}
}
stage ("tagging release image") {
steps{
script {
def buildImageTag = "仓库地址xx/${DOCKER_IMAGE}"
env.releaseImageTag = "${releaseImage}:${RELEASE_TAG}"
echo "build image -----> ${buildImageTag}"
echo "release image --> ${releaseImageTag}"
docker.withTool('docker') {
docker.withServer(dockerServer) {
docker.withRegistry(dockerRegistry, dockerRegistryCredentialsId) {
def buildDockerImage = docker.image(buildImageTag)
buildDockerImage.pull()
sh "docker tag ${buildImageTag} ${releaseImageTag}"
def releaseImage = docker.image(releaseImageTag)
releaseImage.push()
}
}
def label = sh(script:"docker -H ${dockerServer} inspect ${releaseImageTag} -f '{{json .Config.Labels }}'", returnStdout: true)
def json = new groovy.json.JsonSlurperClassic().parseText(label)
def commit = json."xx.commit"
def build = json."xx.build"
println(commit)
println(build)
def appSCM = checkout([
$class: 'GitSCM',
branches: [[name: commit]],
doGenerateSubmoduleConfigurations: false,
extensions: [],
submoduleCfg: [],
userRemoteConfigs:[[credentialsId: repositoryCredentialsId, url: repository]]
])
withCredentials([[$class: 'UsernamePasswordMultiBinding', credentialsId: repositoryCredentialsId, usernameVariable: 'GIT_USERNAME', passwordVariable: 'GIT_PASSWORD']]) {
def description = "new tag from jenkins pipeline [" + env.JOB_NAME + " ],build " + build
sh """
git tag -a release-${RELEASE_TAG} -m "${description}"
git push https://${env.GIT_USERNAME}:${env.GIT_PASSWORD}@仓库地址/xx.git release-${RELEASE_TAG}
"""
}
}
}
}
}
stage ("release to production environment") {
steps {
script {
// 比如可以执行 kubectl set image -- record
sh "echo ${releaseImageTag}"
}
}
}
}
}
更多推荐
所有评论(0)