一套完整的多分支流水线jenkinsfile,使用时只需要修改每个项目的gitlab token,可以做到多个项目通用
pipeline {
agent any
post {
failure {
updateGitlabCommitStatus name: 'build', state: 'failed'
updateGitlabCommitStatus name: 'deploy', state: 'failed'
}
success {
updateGitlabCommitStatus name: 'build', state: 'success'
updateGitlabCommitStatus name: 'deploy', state: 'success'
}
}
options {
gitLabConnection('gitlab-example')
gitlabBuilds(builds: ['build', 'deploy'])
buildDiscarder(logRotator(numToKeepStr: '8', artifactNumToKeepStr: '8'))
}
triggers {
GenericTrigger (
causeString: 'Triggered by $ref',
genericVariables: [[key: 'ref', value: '$.ref']],
printContributedVariables: true,
printPostContent: true,
regexpFilterText: '$ref',
regexpFilterExpression: 'refs/heads/' + BRANCH_NAME,
token: '*******'
)
}
environment {
NODE_IMG = 'node:12.22.1'
MAVEN_IMG = 'maven:3.6.3-jdk-8'
DEPLOY_IMG = 'centos:ssh'
REGISTRY = '********'
ITEM = """${sh(
returnStdout: true,
script: "echo $JOB_NAME | awk -F / '{print \$1}'"
).trim()}"""
}
stages {
stage('build') {
agent{
node{
label 'master'
}
}
steps{
sh script:'''
pwd
ls
'''
script{
docker.withRegistry("$REGISTRY",'9d6108b4-10c4-422b-adf9-27571b9a4526') {
def image = docker.build("devops/$JOB_NAME","./devops/docker")
image.push()
}
}
}
}
stage('deploy') {
steps{
script{
def remote = [:]
remote.name = "******"
remote.host = "******"
remote.allowAnyHosts = true
node {
withCredentials([usernamePassword(credentialsId: '******', passwordVariable: 'password', usernameVariable: 'userName')]) {
remote.user = userName
remote.password = password
stage("deploy") {
sshCommand remote: remote, command: "pwd;mkdir -p $JOB_NAME;ls -l;"
sshPut remote: remote, from: 'devops/docker/docker-compose.yml', into: "$JOB_NAME"
sshCommand remote: remote, command: "export ITEM=$ITEM;export JOB_NAME=$JOB_NAME;docker stack deploy -c $JOB_NAME/docker-compose.yml --with-registry-auth --prune --resolve-image always $ITEM;"
}
}
}
}
}
}
}
}