Jenkins+Pipeline流水线项目(1)

说明

Jenkins pipeline 是一套插件,支持将连续输送管道实施和整合到Jenkins。Pipeline提供了一组可扩展的工具,用于通过管道DSL为代码创建简单到复杂的传送流水线。他目前支持jenkins 2.x以上版本。pipeline是由groovy语言编写

1.安装jenkins

可以查看:https://www.cnblogs.com/jxxiaocao/p/16191140.html

设置仓库和jenkins的关联(因为我使用的是gitee所以就介绍gitee,其他的都差不多)

gitee和jenkins关联:https://www.cnblogs.com/jxxiaocao/p/12668993.html

其他插件:

用户相关信息:https://www.cnblogs.com/jxxiaocao/p/16203126.html

2.安装pipeline插件

3.创建job

3.1参数化构建过程

  设置git参数

3.2流水线

 pipeline声明式代码:

pipeline {    
 agent any //环境maven、jdk等 stages {
//项目构建 stage('拉取代码') { //拉取代码 steps { //具体实施步骤 echo '拉取代码开始'
//下面 生成流水脚本 生成的 语句
//  extensions: [[$class: 'SparseCheckoutPaths', sparseCheckoutPaths: [[path: 'common']]]] 拉取指定目录 checkout([
$
class: 'GitSCM', branches: [[name: '*']],
extensions: [
[$class: 'CleanCheckout', deleteUntrackedNestedRepositories: true]
],
userRemoteConfigs: [[credentialsId: '需要获取', url: 'git地址']]
]) echo
"拉取的TAG:${TAGNAME}" echo '拉取代码结束' } } stage('编译打包') { // 编译打包 steps { //具体实施步骤 echo 'build project' // 打包命令 } } stage('部署上线') { // 部署上线 steps { //具体实施步骤 echo 'publish project' // 部署命令 } } } post { success { //企微通知 TAGNAME 是上面 git参数 那的 名称 sh 'sh /var/lib/jenkins/pipeline/wechat_send.sh token "环境" "${JOB_NAME}" "${TAGNAME}" "${BUILD_DISPLAY_NAME}" "${BUILD_USER}"' echo 'whole pipeline successful' } failure { echo 'FAILED (global)' } } }

pipeline脚本式代码:

node {
      //全局变量(外部可以使用,比如shell中使用)
      env.ENVI = "test"   //定义环境
      env.WECHAT_TOKEN = "key"
      env.ERRI = "false"
      env.WORKSPACE = "/www/jenkins/workspace/${JOB_NAME}"

      //局部变量(在shel中不能使用)
      def GIT_URL = "git地址"

     try{
          stage('拉取代码') {     //拉取代码
             echo '拉取代码开始'
             checkout([
                 $class: 'GitSCM', branches: [[name: '${TAGNAME}']],
                 extensions: [[$class: 'CleanCheckout', deleteUntrackedNestedRepositories: true]],
                 userRemoteConfigs: [[credentialsId: '4e89640d-3576-4043-a4e2-47d', url: "${GIT_URL}"]]
             ])
             echo "拉取的TAG:${TAGNAME}"
             echo '拉取代码结束'
          }
          stage('编译打包') {        // 编译打包
             echo '编译打包开始'
             echo '编译打包结束'
          }
          stage('部署上线') {
             echo '部署上线开始'
// 这里用到 ansible 同步代码(Jenkins+Pipeline+Ansible 自动化部署) sh
'ansible-playbook -e "host=wb workspace=${WORKSPACE} item=${JOB_NAME} exclude=.git*" /etc/ansible/variables.yml' echo '部署上线结束' } env.RESULT = currentBuild.currentResult }catch(err){ echo "编译失败,错误原因如下:${err} " env.ERRI = "true" env.RESULT = "FAILURE:\n ${err}" }finally{ } //获取构建用时 env.DURATION_STRING = currentBuild.durationString //企微通知 sh 'sh /var/lib/jenkins/pipeline/wechat_send.sh "${WECHAT_TOKEN}" \ "${ENVI}" \ "${JOB_NAME}" \ "${TAGNAME}" \ "${BUILD_DISPLAY_NAME}" \ "${DURATION_STRING}" \ "${RESULT}" \ "${BUILD_USER}"' //判断是否失败,如果是强制显示失败图标 if(env.ERRI == "true"){ script { error "${ERRI}" } } }

ps:Pipeline流水线的优化方案

Pipeline语法:

比如获取credentialsId

 

 

 

 

点击  生成流水脚本 

 

 

 

 把生成的 checkout(.......) 放到 上面

 3.3构建

结果:

 

wechat_send.sh 脚本(通知)

#!/bin/sh
  
CHAT_WEBHOOK_KEY="$1"
ENV="$2"
ITEM="$3"
TAG="$4"
BUILD_DISPLAY_NAME="$5"
MILLIS_TIME="$6"
STATE="$7"
OPERATOR="$8"


CHAT_WEBHOOK_URL='https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key'
CHAT_CONTENT_TYPE='Content-Type: application/json'


curl "${CHAT_WEBHOOK_URL}=${CHAT_WEBHOOK_KEY}" \
   -H "${CHAT_CONTENT_TYPE}" \
   -d '
   {
     "msgtype": "markdown",
     "markdown": {
        "content": "<font color=\"warning\">版本发布通知</font>\n
         >发布环境:<font color=\"info\">'"${ENV}"'</font>
         >项目名称:<font color=\"info\">'"${ITEM}"'</font>
         >发布Tag:<font color=\"info\">'"${TAG}"'</font>
         >构建名称:<font color=\"comment\">'"${BUILD_DISPLAY_NAME}"'</font>
         >构建用时:<font color=\"comment\">'"${MILLIS_TIME}"'</font>
         >构建状态:<font color=\"warning\">'"${STATE}"'</font>
         >执行人:<font color=\"comment\">'"${OPERATOR}"'</font>"
     }
   }

 ps:企微通知需要安装 Qy Wechat Notification 插件,当然也可以用 钉钉 通知就不介绍了都差不多

通知

成功:

 失败:

posted @ 2022-04-28 18:24  晴箜万里  阅读(463)  评论(1编辑  收藏  举报