Jenkins pipeline 实战代码分享

简介: Jenkins pipeline 实战代码分享

我 Jenkins pipeline 工程运行后的界面如下

image.png


下面就直接分享干货,上 pipeline  代码,需要的可以参考,拿走适配自己的工程,修改一下就能直接跑运行了,希望对各位有所帮助。


//===============================================================================================================================//


// 输出日志用颜色标识

def log(def level, def message) {

   // 定义日志输出颜色

   def ansi_color = ["red": "\033[31m", "green": "\033[32m", "yellow": "\033[33m", "blue": "\033[34m", "res": "\033[0m"]

   if("${level}" == "info") {

       println("ansicolor.green∗∗∗∗∗∗∗∗{ansi_color.green}********{message}********${ansi_color.res}")

   } else if("${level}" == "warnning") {

       println("ansicolor.red∗∗∗∗∗∗∗∗{ansi_color.red}********{message}********${ansi_color.res}")

   }

}

// 清理工作空间

def clean_dir() {

   log("info", "start clean workspace")

   deleteDir()

   log("info", "end clean workspace")

   // params.each {

   //     my_params.add(string(name: it.key, value: it.value))

   // }

}

// check 仓库代码

def scprit_check() {

   msg = "echo scprit_check"

   /*sh """

       git clone http://username:{user_name}:{password_p}@192.203.172.62:8068/root/mvnwebapp.git --depth 1 --branch master mvnwebapp

   """*/

}

// 执行 mvn 编译

def scprit_run() {

   msg = "echo scprit_run"

   /*sh """

       cd env.WORKSPACE/{env.WORKSPACE}/{repo_name} && mvn clean compile package -DskipTests=true

   """*/

}

// sonar 代码扫描质量分析

def scprit_sonar() {

   msg = "echo scprit_sonar"

   /*sh """

       cd env.WORKSPACE/{env.WORKSPACE}/{repo_name} && echo "sonarqube"

   """*/

}

// 构建镜像 push 到 docker

def scprit_docker() {

   msg = "echo scprit_docker"

   /*sh """

       cd env.WORKSPACE/{env.WORKSPACE}/{repo_name} && echo "docker"

   """*/

}

// 构建镜像 push 到 artifactory

def scprit_artifactory() {

   msg = "echo scprit_artifactory"

   /*sh """

       cd env.WORKSPACE/{env.WORKSPACE}/{repo_name}/out

       jfrog rt upload --user scmroot --access-token x8jYt43Ekj4RJljigIET05A2MMhq --url http://www.jfrogpro.itdev.cn/artifactory/ mvnwebapp/targer/ encdate-maven-repo/dev/

   """*/

}

// 发布到研发环境进行验证

def scprit_deploy() {

   msg = "echo scprit_deploy"

   /*sh """

       cd env.WORKSPACE/{env.WORKSPACE}/{repo_name} && cp -rf target/*.war scmroot@192.13.117.15/data/{repo_name}_{repo_name}_{repo_name}_{BUILDDATE}

   """*/

}

// ****************************************** Start ************************************

pipeline {

   agent {

       node {

           label "master"

           //label "SH_Ubuntu22"

       }

   }

   

   environment {

       BUILDDATE = sh(script: "date +%Y%m%d", returnStdout: true).trim()

       BUILDTIME = sh(script: "date +%Y%m%d%H%M%S", returnStdout: true).trim()

       LC_ALL="C.UTF-8"

       LANG="C.UTF-8"

   }

   parameters {

       string(name: "REPO_NAME", defaultValue: "mvnwebapp", description: "gitlab中的git仓库名称")

       string(name: "BRANCH_NAME", defaultValue: "master", description: "source仓库主干分支")

       string(name: "USER_NAME", defaultValue: "", description: "用户名")

       string(name: "PASSWORD_P", defaultValue: "", description: "用户密码")

   }

   options {

       ansiColor('xterm')

       disableConcurrentBuilds()

       timestamps()

   }

   stages {

       stage("Clean") {

           steps {

               dir("${env.workspace}") {

                   script {

                       clean_dir()

                   }

               }

           }

       }

       stage("CheckOut") {

           steps {

               dir("${env.workspace}") {

                   script {

                       scprit_check()

                       println env.JOB_NAME

                       println env.BUILD_NUMBER

                   }

               }

           }

       }

       stage("Build") {

           steps {

               dir("${env.workspace}") {

                   script {

                       scprit_run()

                   }

               }

           }

       }

       stage("SonarQube") {

           steps {

               dir("${env.workspace}") {

                   script {

                       scprit_sonar()

                   }

               }

           }

       }

       stage("Push Docker") {

           steps {

               dir("${env.workspace}") {

                   script {

                       scprit_docker()

                   }

               }

           }

       }

       stage("Push Artifactory") {

           steps {

               dir("${env.workspace}") {

                   script {

                       scprit_artifactory()

                   }

               }

           }

       }

       stage("Deploy") {

           steps {

               dir("${env.workspace}") {

                   script {

                       scprit_deploy()

                   }

               }

           }

       }

   }

   post {

       success {

           println("success")

           emailext (

               subject: "The Project information is as follows:",

               body: """Successful: Project JOBNAME[{JOB_NAME} [{BUILD_NUMBER}]'

               Build Status: ${JOB_NAME} job Build works normally

               JOB URL: ${BUILD_URL}

               Project Name: ${JOB_NAME}

               Project Compilation Times:${BUILD_NUMBER}""",

               to: "cicdadmin@sysdev.com",

               from: "cicdadmin@sysdev.com"

               )

           }

       failure {

           println("failed")

           emailext (

               subject: "The Project information is as follows:",

               body: """Failed: Project JOBNAME[{JOB_NAME} [{BUILD_NUMBER}]'

               Build Status: ${JOB_NAME} job Build works normally

               JOB URL: ${BUILD_URL}

               Project Name: ${JOB_NAME}

               Project Compilation Times:${BUILD_NUMBER}""",

               to: "cicdadmin@sysdev.com",

               from: "cicdadmin@sysdev.com"

               )

          }

     }

}

//===============================================================================================================================//

// 邮件通知

/*def send_mail() {

   def user = "wst021@zoho.com"

   def email_subject = "FAILED: Job '{env.JOB_NAME} - Build #{env.JOB_NAME} - Build #{env.JOB_NAME} - Build #{env.BUILD_NUMBER}]'"

   if ("${msg}" == "") {

       email_subject = "SUCCESSED: Job '[{env.JOB_NAME} - Build #{env.JOB_NAME} - Build #{env.JOB_NAME} - Build #{env.BUILD_NUMBER} - ${params.PROJECT_NAME}]'"

   }

   emailext (

       subject: "${email_subject}",

       mimeType: 'text/html',

       attachLog: true,

       compressLog: false,

       body: """

       

           

               

  • 下载地址: http://192.203.71.124:18081/artifactory/devpackage/${BUILDDATE}
  •                ${msg}

               

           

           """,

           to: "${user}",

           from: "jenkins@admin.com"

       )

    }*/

    相关文章
    |
    1月前
    |
    jenkins Java 持续交付
    Gitee+Jenkins+SonarQube代码上线的实战操作
    通过以上步骤,就可以实现基于Gitee、Jenkins和SonarQube的代码上线流程,确保代码的质量和上线过程的自动化和可控性。在实际操作中,可以根据项目的具体需求和环境进行适当的调整和优化。
    |
    1月前
    |
    jenkins Java 测试技术
    如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
    本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
    73 3
    |
    2月前
    |
    运维 监控 jenkins
    运维自动化实战:利用Jenkins构建高效CI/CD流程
    【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
    |
    2月前
    |
    jenkins Java 测试技术
    如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
    【10月更文挑战第8天】本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
    43 5
    |
    2月前
    |
    jenkins 持续交付 开发工具
    【10月更文挑战第1天】通过jenkins选择tag完成代码上线
    【10月更文挑战第1天】通过jenkins选择tag完成代码上线
    |
    4月前
    |
    jenkins 持续交付 网络安全
    利用 Jenkins 实现持续集成与持续部署-代码拉取终端的配置
    【8月更文挑战第30天】在Jenkins服务器中,git和Gitee是常用的代码拉取终端。Git作为分布式版本控制系统,具备出色的灵活性和可扩展性;而Gitee则在国内网络环境下表现更佳,适合团队协作。Git配置包括安装、设置用户信息及生成SSH密钥等步骤;Gitee配置也类似,需注册账号、创建仓库、配置基本信息并设置远程仓库地址。开发人员提交代码后,可通过Webhook、定时轮询或事件监听等方式触发Jenkins动作,确保持续集成和部署高效运行。正确配置这些触发机制并通过测试验证其有效性至关重要。
    78 2
    |
    3月前
    |
    jenkins 持续交付 网络安全
    利用 Jenkins 实现持续集成与持续部署-代码拉取终端的配置
    安装Git、配置用户信息、生成SSH密钥以及在Gitee上创建项目仓库等。
    92 0
    |
    4月前
    |
    前端开发 jenkins 持续交付
    jenkins学习笔记之二十:docker in docker运行pipeline
    jenkins学习笔记之二十:docker in docker运行pipeline
    |
    4月前
    |
    jenkins 持续交付 网络安全
    Jenkins Pipeline SSH Publisher 环境变量、参数引用 要用双引号
    Jenkins Pipeline SSH Publisher 环境变量、参数引用 要用双引号
    160 0
    |
    4月前
    |
    jenkins 持续交付 Windows
    Jenkins Pipeline 多分支流水线 Input length = 1
    Jenkins Pipeline 多分支流水线 Input length = 1
    43 0