Skip to content

jenkins-pipeline-script部署实例和回滚实例

部署操作 jenkins job 任务 pipeline script 脚本

shell
env.GIT='ssh://git@git.xxx.com:2222/bop/fms-group/fms.git'
env.name='fms-p'
env.docker_path='fms-p/docker'
env.jar_name='fms-p'
env.dockerfile_jar_name='fms-p'

env.node1='xxx1.com'
env.node2='xxx2.com'
def timeStamp = Calendar.getInstance().getTime().format('YYYYMMddhhmmss',TimeZone.getTimeZone('Asia/Shanghai'))
env.build_version = timeStamp

    node("150g"){
          stage('Git Checkout'){
            sh '''
            rm -rf ./*
            '''
            checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'xxxxxxx-xxxx-xxxx',url: env.GIT]]])
          }
          stage('Maven Build'){
            echo "Maven Build..."
            sh '''
            mvn clean install
            '''
          }

          stage('Build and Push Image'){
              withCredentials([string(credentialsId: 'xxxxxxx-xxxx-xxxx', variable: 'HUB_TOKEN')]) {
                  sh '''

                  docker login -u bop_mail_alert -p ${HUB_TOKEN} http://registry.api.xxx.com
                  cd ${docker_path}
                  rm -rf ../target/${jar_name}-1.0*-javadoc.jar ../target/${jar_name}-1.0*-sources.jar

                  touch 200.sh .
                  touch 503.sh .

                  cp ../target/${jar_name}-1.0*.jar ./${dockerfile_jar_name}.jar

                  docker build -t registry.api.xxx.com/bop-k8s/${name}:${build_version} .
                  docker push registry.api.xxx.com/bop-k8s/${name}:${build_version}
                  '''
              }

          }

    }


    node(env.node1){

          stage('Pull Image And Run'){
              withCredentials([string(credentialsId: 'xxxxxxx-xxxx-xxxx', variable: 'HUB_TOKEN')]) {
                  sh '''
                  set +e
                  sleep 5

                  docker rmi ${name}-backup
                  docker commit ${name} ${name}-backup
                  docker stop --time=20 ${name}
                  docker rm -f ${name}
                  docker pull registry.api.xxx.com/bop-k8s/${name}:${build_version}
                  docker run -d -v /data0/${name}/logs:/data/logs --name ${name} --net="host"  --ulimit nofile=200000 -v /etc/localtime:/etc/localtime:ro -m 1536M --memory-swap 2048M -e JAVA_OPTS="-server -Xmx1024m" registry.api.xxx.com/bop-k8s/${name}:${build_version}
                  '''
              }

          }

    }
    node(env.node2){

          stage('Pull Image And Run'){
              withCredentials([string(credentialsId: 'xxxxxxx-xxxx-xxxx', variable: 'HUB_TOKEN')]) {
                  sh '''
                  set +e

                  docker rmi ${name}-backup
                  docker commit ${name} ${name}-backup
                  docker stop --time=20 ${name}
                  docker rm -f ${name}
                  docker pull registry.api.xxx.com/bop-k8s/${name}:${build_version}
                  docker run -d -p 80:80 -v /data0/${name}/logs:/data/logs --name ${name} --net="host"  --ulimit nofile=200000 -v /etc/localtime:/etc/localtime:ro -m 1536M --memory-swap 2048M -e JAVA_OPTS="-server -Xmx1024m" registry.api.xxx.com/bop-k8s/${name}:${build_version}
                  '''
              }

          }

    }

回滚操作 jenkins job 任务 pipeline script 脚本

jenkins 新建任务 fms-g-rollback 复制 fms-g job 任务 配置 勾选参数化构建过程 选择文本参数 定义名称:tag 默认值: backup 描述:请输入回滚的镜像版本号!默认回滚备份的上一版本 docker 镜像!

shell
env.name='fms-g'

env.node1='xx1.com'
env.node2='xx2.com'

    node(env.node1){

          stage('Rolling back node1'){
              withCredentials([string(credentialsId: 'xxxxx-xxxxx', variable: 'HUB_TOKEN')]) {
                  sh '''
                  set +e
                  sleep 5

                  rollImages=registry.api.xxx.com/bop-k8s/${name}:${tag}
                  if [ "${tag}" = "backup" ]
                  then
                     rollImages=${name}-backup
                  fi

                  if [ "$(docker images -q ${rollImages} 2> /dev/null)" == "" ]
                  then
                    echo "回滚的镜像name为:${rollImages} 不存在,无法回滚";
                    exit 1
                  fi

                  docker stop --time=20 ${name}
                  docker rm -f ${name}
                  docker run -d -v /data0/${name}/logs:/data/logs --name ${name} --net="host"  --ulimit nofile=200000 -v /etc/localtime:/etc/localtime:ro -m 1536M --memory-swap 2048M -e JAVA_OPTS="-server -Xmx1024m" ${rollImages}
                  '''
              }

          }

    }
    node(env.node2){

          stage('Rolling back node2'){
              withCredentials([string(credentialsId: 'xxxxx-xxx', variable: 'HUB_TOKEN')]) {
                  sh '''
                  set +e

                  rollImages=registry.api.xxx.com/bop-k8s/${name}:${tag}
                  if [ "${tag}" = "backup" ]
                  then
                     rollImages=${name}-backup
                  fi

                  if [ "$(docker images -q ${rollImages} 2> /dev/null)" == "" ]
                  then
                    echo "回滚的镜像name为:${rollImages} 不存在,无法回滚";
                    exit 1
                  fi

                  docker stop --time=20 ${name}
                  docker rm -f ${name}
                  docker run -d -p 80:80 -v /data0/${name}/logs:/data/logs --name ${name} --net="host"  --ulimit nofile=200000 -v /etc/localtime:/etc/localtime:ro -m 1536M --memory-swap 2048M -e JAVA_OPTS="-server -Xmx1024m" ${rollImages}
                  '''
              }

          }

    }
最近更新