//写流水线的脚本(声明式、脚本式) pipeline{ //全部的CICD流程都需要在这里定义 //任何一个代理可用就可以执行 // agent none //以后所有stage都必须指定自己的 agent any //定义一些环境信息 environment { WS = "${WORKSPACE}" IMAGE_VERSION = "v1.0" //引用Jenkins配置的全局秘钥信息 // ALIYUN_SECRTE=credentials("aliyun-docker-repo") } //定义流水线的加工流程 stages { //流水线的所有阶段 stage('环境检查'){ steps { echo "正在检测基本信息" sh 'java -version' sh 'git --version' sh 'docker version' sh 'pwd && ls -alh' } } //1、编译 "abc" stage('maven编译'){ //jenkins不配置任何环境的情况下, 仅适用docker 兼容所有场景 agent { docker { image 'maven:3-alpine' // args '-v /var/jenkins_home/appconfig/maven/.m2:/root/.m2' // args '-v /a/settings.xml:/app/settings.xml' //docker run -v /a/settings.xml:/app/settings.xml } } steps { //git下载来的代码目录下 sh 'pwd && ls -alh' sh 'mvn -v' //打包,jar.。默认是从maven中央仓库下载。 jenkins目录+容器目录;-s指定容器内位置 //只要jenkins迁移,不会对我们产生任何影响 sh "echo 默认的工作目录:${WS}" // sh 'cd ${WS}' //workdir //每一行指令都是基于当前环境信息。和上下指令无关 // sh 'cd ${WS} && mvn clean package -s "/var/jenkins_home/appconfig/maven/settings.xml" -Dmaven.test.skip=true ' sh 'cd ${WS} && mvn clean package -Dmaven.test.skip=true ' //jar包推送给maven repo ,nexus //如何让他适用阿里云镜像源 } } //2、测试,每一个 stage的开始,都会重置到默认的WORKSPACE位置 stage('测试'){ steps { sh 'pwd && ls -alh' echo "测试..." } } //3、打包 stage('生成镜像'){ steps { echo "打包..." //检查Jenkins的docker命令是否能运行 sh 'docker version' sh 'pwd && ls -alh' sh 'docker build -t java-devops-demo .' //镜像就可以进行保存 } } // stage('推送镜像'){ // //没有起容器代理,默认就是jenkins环境 // //step里面卡点这么写 // // input message: '需要推送远程镜像吗?', ok: '需要', parameters: [text(defaultValue: 'v1.0', description: '生产环境需要部署的版本', name: 'APP_VER')] // //step外面这么写 // input { // message "需要推送远程镜像吗?" // ok "需要" // parameters { // string(name: 'APP_VER', defaultValue: 'v1.0', description: '生产环境需要部署的版本') // choice choices: ['bj-01', 'sh-02', 'wuhan-01'], description: '部署的大区', name: 'DEPLOY_WHERE' // } // } // } //4、部署 stage('部署'){ steps { echo "部署..." sh 'docker rm -f java-devops-demo-dev' sh 'docker run -d -p 8888:8080 --name java-devops-demo-dev java-devops-demo' } //后置执行 // post { // failure { // // One or more steps need to be included within each condition's block. // echo "炸了.. ." // } // // success { // echo "成了..." // } // } } // //5、推送报告 // stage("发送报告"){ // steps { // //短信通知,购买api接口即可 // // sh 'curl -i -k -X POST 'https://gyytz.market.alicloudapi.com/sms/smsSend?mobile=mobile¶m=**code**%3A12345%2C**minute**%3A5&smsSignId=2e65b1bb3d054466b82f0c9d125465e2&templateId=908e94ccf08b4476ba6c876d13f084ad' -H 'Authorization:APPCODE dddddddd'' // //REST API 所有都行 // // sh 'curl ' // echo '准备发送报告' // emailext body: ''' // // // // ${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志 // // // //

本邮件由系统自动发出,请勿回复!

// //
// 各位同事,大家好,以下为${PROJECT_NAME }项目构建信息
// // // // // // // // //
构建结果 - ${BUILD_STATUS}

// 构建信息 //
// //

最近提交

//
    //
    // ${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="%c", changesFormat="
  • %d [%a] %m
  • "} //
// 详细提交: ${PROJECT_URL}changes
//
// // ''', subject: '${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志', to: '17512080612@163.com' // } // } stage('部署到生产环境吗?'){ steps { // 手动输入版本【参数化构建】,推荐生成器 // input { // message "需要部署到生产环境吗?" // ok "是的,赶紧部署" // // submitter "alice,bob" // parameters { // //手动传入的参数 // string(name: 'APP_VERSION', defaultValue: 'v1.0', description: '请指定生产版本号') // } // } sh "echo 发布版本咯......" // 版本的保存。代码的保存。镜像的保存。存到远程仓库 } } } //后置处理过程 post { failure { echo "这个阶段 完蛋了.... $currentBuild.result" } success { echo "这个阶段 成了.... $currentBuild.result" } } }