示例说明
- 选择分支或者Tag,拉取代码进行构建
- 打包镜像(使用maven-dockerfile-plugin)
- 推送镜像
其中maven-and-docker为Jenkins-系统管理-ConfigureClouds里面定义的Pod模板。
maven-and-docker的父Pod模板为maven-3.6
Pod Template
pipeline {
environment {
appName = "c8-server"
CREDS = credentials('xxx-test-swr')
}
agent {
kubernetes {
inheritFrom 'maven-and-docker'
}
}
parameters {
choice(name: 'BranchOrTag', choices: ['Branch','Tag'],description: 'Select branch type.')
gitParameter name: 'BRANCH',
type: 'PT_BRANCH',
branchFilter: 'origin/(.*)',
defaultValue: 'master',
selectedValue: 'DEFAULT',
sortMode: 'DESCENDING_SMART',
description: 'Select your branch.'
gitParameter name: 'TAG',
type: 'PT_TAG',
branchFilter: 'origin/(.*)',
defaultValue: 'master',
selectedValue: 'DEFAULT',
sortMode: 'DESCENDING_SMART',
description: 'Select your tag.'
}
stages {
stage ('Choice BranchOrTag'){
steps {
script {
if("${params.BranchOrTag}"=='Branch'){
BRANCH_TAG = "${params.BRANCH}"
}else{
BRANCH_TAG = "${params.TAG}"
}
}
}
}
stage ('Source'){
steps {
checkout([$class: 'GitSCM',
branches: [[name: "${BRANCH_TAG}"]],
doGenerateSubmoduleConfigurations: false,
extensions: [],
gitTool: 'Default',
submoduleCfg: [],
userRemoteConfigs: [[url: 'https://gitlab.xxx.com/xxx/plm-c8.git',credentialsId: 'xxx_gitlab',]]
])
}
}
stage ('Build') {
steps {
container ('maven') {
sh 'mvn clean package dockerfile:build -U -Ptest -pl ${appName}'
}
}
}
stage ('Push Image') {
steps {
container ('maven') {
sh 'mvn dockerfile:push -P test -Ddockerfile.username=${CREDS_USR} -Ddockerfile.password=${CREDS_PSW}'
}
}
}
stage ('Deploy') {
agent {label 'kubectl'}
steps {
container('kubectl'){
withKubeConfig([credentialsId:'rancher-xxx-test-kubefile']){
sh '''
kubectl set image deployment/c8-server c8-server=xxx.com/xx-plm/c8-server:test -n plm-sit
kubectl rollout restart deployment/c8-server -n plm-sit
'''
}
}
}
}
}
}
注:如果需要构建的时候根据git的tag指定镜像的tag,可以直接在dockerfile:build和dockerfile:push后面跟上 -DdockerTag=${TAG}
附:
dockerfile插件:
https://github.com/spotify/dockerfile-maven
https://gitee.com/mirrors_spotify/dockerfile-maven
网友评论