pipeline {
//agent any
agent none
environment {
HARBOR_CREDS = credentials('harbor-admin-passwd')
//BUILD_BAK = $[ ${BUILD_ID} -2 ]
//GIT_TAG = sh(returnStdout: true,script: 'git describe --tags --always').trim()
}
options {
//日志会有时间,删除隐形checkout scm语句,禁止并行,流水线超时设置1h
timestamps()
//shkipDefaultCheckout()
//disableConcurrentBuilds()
timeout(time: 1, unit: 'HOURS')
}
parameters{
string(name: 'BRANCH', defaultValue: 'master', description: '仓库分支')
//string(name: 'HARBOR_HOST', defaultValue: '106.13.xxx.xx:31007', description: 'harbor仓库地址')
//string(name: 'DOCKER_IMAGE', defaultValue: 'xx/java-demo', description: 'docker镜像名')
}
stages{
stage('拉取代码'){
agent { node { label 'master'} }
steps{
timeout (time:20, unit:"MINUTES"){
git branch: '${BRANCH}',credentialsId: 'gitlab-root-passwd', url: 'http://106.13.xx.xx:31001/xx/xx-admin-service.git'
}
}
}
stage('静态扫描'){
agent { node { label 'master'} }
steps {
echo "Code Scanning"
}
}
stage('代码打包'){
agent { node { label 'master'} }
steps {
//sh '[ ! -d ${WORKSPACE}/deploy ] && mkdir ${WORKSPACE}/deploy'
sh 'rm -rf ${WORKSPACE}/deploy/*.gz'
sh 'tar -zcvf ${WORKSPACE}/deploy/${JOB_NAME}_${BUILD_ID}.tar.gz --exclude=".gitattributes" --exclude=".git" --exclude=".gitignore" --exclude="*.rar" --exclude=deploy ./*'
}
}
stage('代码检测'){
agent { node { label 'master'} }
steps {
timeout (time:20, unit:"MINUTES"){
sh "echo 代码质量检测"
}
}
}
stage('代码上传'){
agent { node { label 'master'} }
steps {
sh 'scp -P 31000 ${WORKSPACE}/deploy/*.tar.gz root@172.16.16.5:/data/jenkins'
}
}
stage('代码部署'){
agent { node { label 'master'} }
steps {
sh "ssh -p 31000 172.16.16.5 'tar -zxf /data/jenkins/${JOB_NAME}_${BUILD_ID}.tar.gz -C /data/wwwroot/dev/xx-admin/'"
}
}
stage('镜像制作'){
agent { node { label 'master'} }
steps{
timeout (time:20, unit:"MINUTES"){
sh "ssh -p 31000 172.16.16.5 'cd /data/wwwroot/dev/xx-admin/ \
&& find ./ -type f -name Dockerfile -exec cp {} . \\; \
&& docker build -t ${JOB_NAME}_${BUILD_ID} . \
&& docker rmi -f ${JOB_NAME}_\$[ ${BUILD_ID} - 2 ] '"
}
}
}
stage('启动镜像'){
agent { node { label 'master'} }
steps {
sh "ssh -p 31000 172.16.16.5 'docker rm -f xx-admin \
&& docker run -d --restart=always --name rocilife-admin -p 80:80 ${JOB_NAME}_${BUILD_ID}'"
}
}
}
post {
always {
script{
println("always")
}
}
success {
script {
currentBuild.description = "构建成功!"
}
}
failure {
script{
currentBuild.description = "构建失败!"
}
}
aborted {
script {
currentBuild.description ="构建取消!"
}
}
}
}