文章简介此篇文章介绍了将docker 集成到Jenkins pipeline 中,具体流程如下:        checkout_get_code ---> Build_jar --->tar_package--->持续部署--->build_and_push_image--->jacoco 文章最后会附上完整Jenkinsfile 

Jenkins服务器配置        Docker 安装Docker安装步骤请参照“DevOps 生态介绍(八):docker &dockerfile 命令介绍及构建项目的第一个镜像” 里面的步骤安装即可        Jenkins 登录acr  在Jenkins pipeline 过程中要将build image 推到镜像仓库,Jenkins 需要先登录ACR,Jenkins 登录ACR步骤请参考“DevOps 生态介绍(九):别再只用 Docker Hub 了!生产环境必知的 ACR 与 ECR 选型攻略” 这篇文章的ACR使用说明一栏即可Jenkins pipeline             下面是完整的Jenkinsfile 文件pipeline {    agent any    tools {        maven 'Maven'    }    parameters {        gitParameter(            name: 'BRANCH',            type: 'PT_BRANCH',            defaultValue: 'master',            branchFilter: 'origin/(.*)',            sortMode: 'DESCENDING_SMART',            selectedValue: 'DEFAULT',            description: '请选择要构建的分支'        )        booleanParam(            name: 'SKIP_TEST',            defaultValue: true,            description: '是否跳过单元测试'        )        choice(            name: 'JDK_VERSION',            choices: ['JDK17','JDK21'],            description: '请选择JDK版本'        )    }    environment {        JAVA_HOME = tool "${params.JDK_VERSION}"        PATH = "${env.JAVA_HOME}/bin:${env.PATH}"    }    stages {        stage('checkout_get_code') {            steps {                checkout([                    $class: 'GitSCM',                    branches: [[name: "*/${params.BRANCH}"]],                    userRemoteConfigs: [[                        credentialsId: 'f245a11f-afe0-4ca4-aa2d-1e574724677d',                        url: 'https://codeup.aliyun.com/60b83b0db8301d20d58b8017/test.git'                    ]]                ])            }        }        stage('Build_jar') {            steps {                sh """                    echo "build jar"                    java -version                    echo $JAVA_HOME                    mvn clean package \                    -DskipTests=${params.SKIP_TEST}                """            }        }        stage('tar_package') {            steps {                sh """                    echo "tar package 开始..."                    cd target                    tar -zcvf test.tar.gz \                    ms-pats-mq-util-1.2.0-SNAPSHOT.jar                """            }        }        stage('CD') {            steps {                sshPublisher(                    publishers: [                        sshPublisherDesc(                            configName: '192.168.1.170',                            transfers: [                                sshTransfer(                                    cleanRemote: false,                                    excludes: '',                                    execCommand: '''                                      #!/bin/bash                                      source /etc/profile                                      cd /data/app/mq_util                                      ./server.sh stop                                      tar zxvf test.tar.gz                                      sleep 2                                      rm -rf test.tar.gz                                      BUILD_ID=dontKillMe                                      ./server.sh start                                      sleep 2                                      ''',                                    execTimeout: 120000,                                    flatten: false,                                    makeEmptyDirs: false,                                    noDefaultExcludes: false,                                    patternSeparator: '[, ]+',                                    remoteDirectory: '/data/app/mq_util',                                    remoteDirectorySDF: false,                                    removePrefix: 'target/',                                    sourceFiles: 'target/test.tar.gz'                                )                            ],                            usePromotionTimestamp: false,                            useWorkspaceInPromotion: false,                            verbose: false                        )                    ]                )            }        }        stage('build_and_push_images ') {            steps {                sh '''                    DATE=`date '+%Y%m%d'`                    docker build -t project_server .                    docker tag project_server:latest  registry.cn-shanghai.aliyuncs.com/project_name/project_server:$DATE                    docker push registry.cn-shanghai.aliyuncs.com/project_name/project_server:$DATE                    docker rmi registry.cn-shanghai.aliyuncs.com/project_name/project_server:$DATE                    docker rmi project_server:latest                    echo "docker build success"                '''            }        }        stage('jacoco') {            steps {                jacoco()            }        }    }}

 

备注:        1:Jenkinsfile 文件中stage('build_and_push_images ') 的sh 这里我用的是单引号''' '''         2:build image 需要用到Dockerfile 文件,需要将Dockerfile文件放到项目的根目录下,跟pom.xml 在同一目录下          3:dockerfile 文件的编写格式请参照“DevOps 生态介绍(八):docker &dockerfile 命令介绍及构建项目的第一个镜像”         4:我这里的项目单独建了一个pipeline的分支,专门是存放Jenkinsfile文件的,这样便于管理,只需要修改这个分支下的Jenkinsfile文件即可,不需要修改所有分支下的Jenkinsfile。                上面完整的Jenkinsfile文件是能够正常跑通

更多推荐