// 所有的脚本命令都放在pipeline中 pipeline{ // 指定任务在哪个集群节点中执行 agent any // 声明全局变量,方便后面使用 environment { harborUser = 'admin' harborPasswd = 'Harbor12345' harborAddress = '47.103.25.235:8899' harborRepo = 'repo' BUILD_USER = 'chl' } stages{ stage('拉取git仓库代码'){ steps{ checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: '184a2c7a-1d7b-448f-90c4-3474c395c7b3', url: 'http://110.42.248.201:30000/chl/mytest.git']]) } } stage('通过maven构建项目'){ steps{ sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests' } } stage('通过SonarQube做代码质量检测'){ steps{ sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.source=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=./target/ -Dsonar.login=b5071fbe332d4863b0c96b0d648593b23ec8d6c8' } } stage('通过Docker制作自定义镜像'){ steps{ sh '''mv ./target/*.jar ./docker docker build -t ${JOB_NAME}:${tag} ./docker/''' } } stage('将自定义镜像推送到Harbor'){ steps{ sh '''docker login -u ${harborUser} -p ${harborPasswd} ${harborAddress} docker tag ${JOB_NAME}:${tag} ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag} docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}''' } } stage('通过Publish Over SSH通知目标服务器'){ steps{ sshPublisher(publishers: [sshPublisherDesc(configName: 'test', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "deploy.sh $harborAddress $harborRepo $JOB_NAME $tag $container_port $host_port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)]) echo '通过Publish Over SSH通知目标服务器 - SUCCESS' } } } post { success { dingtalk ( robot: "Jenkins-DingDing", type:'ACTION_CARD', atAll: false, title: "构建成功:${env.JOB_NAME}", text: [ "### [${env.JOB_NAME}](${env.JOB_URL}) ", '---', "- 任务:[${currentBuild.displayName}](${env.BUILD_URL})", '- 状态:成功', "- 持续时间:${currentBuild.durationString}".split("and counting")[0], "- 执行人:${BUILD_USER}", ] ) } failure { dingtalk ( robot: "Jenkins-DingDing", type:'ACTION_CARD', atAll: false, title: "构建失败:${env.JOB_NAME}", text: [ "### [${env.JOB_NAME}](${env.JOB_URL}) ", '---', "- 任务:[${currentBuild.displayName}](${env.BUILD_URL})", '- 状态:失败', "- 持续时间:${currentBuild.durationString}".split("and counting")[0], "- 执行人:${BUILD_USER}", ] ) } } }