天天看点

jenkins声明式pipeline语法

文章目录

  • ​​语法​​
  • ​​Jenkins自带流水线语法生成器​​
  • ​​options​​
  • ​​`Discard old builds`​​
  • ​​参数化构建​​
  • ​​并行执行stage​​
  • ​​触发下游job构建​​
  • ​​声明式和脚本式均可使用​​
  • ​​`注释`​​
  • ​​`执行shell脚本`​​
  • ​​单引号与双引号的区别​​
  • ​​`到指定目录下执行`​​
  • ​​`sshPublisher`​​
  • ​​常用指令​​

语法

pipeline {
   agent any
   environment {        //设置全局变量
      username = 'test'
      password = "123456"
   }
   parameters {         //参数化构建
      choice choices: ['true', 'false'], description: '测试', name: 'test'
      string name: 'NEW_BRANCH', defaultValue: '', description:'', trim: true
    }
   stages {
      stage('阶段一') {
         steps {
            deleteDir()    //清空当前${WORKSPACE}下面的内容
            sh '''
               echo "执行Shell命令"
            '''
        }
      }
      stage('阶段二') {
         steps {
            sh '''
               echo "执行Shell命令"
            '''
        }
      }
      stage('并行') {
        parallel {
              stage('Stage1') {
                  steps {
                      echo "Stage1"
                  }
              }                             
              stage('Stage2') {
                  steps {
                      echo "Stage2"
                  }
              }
        }
      }
      
    }
    
   post {      //构建后处理
       always {
           echo "总是执行"
       }
       failure {
           echo "失败后执行"
       }
       success {
           echo "成功后执行"
       }
   }
}      

解释:

agent any   #Jenkins自动分配一个代理节点去执行
agent {
       label "执行机标签名"  //指定执行机
}      

Jenkins自带流水线语法生成器

jenkins声明式pipeline语法

以参数化构建为例,配置好之后,点击​​

​"Generate Dectarative Directive"​

​​即可在下方生成代码,直接复制到Groovy脚本即可

jenkins声明式pipeline语法

options

​Discard old builds​

options {
        buildDiscarder logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '30')   //保留历史构建数30个
    }      

参数化构建

jenkins声明式pipeline语法
parameters {            //参数化构建
      choice choices: ['true', 'false'], description: '测试', name: 'test'        //选择参数
      string name: 'NEW_BRANCH', defaultValue: '', description:'', trim: true   //字符串参数
      listGitBranches branchFilter: '.*/feature.*||.*/dev', credentialsId: 'devops',
                defaultValue: '', name: 'BRANCH', quickFilterEnabled: true, remoteURL: 'https://192.168.1.2/devops.git', selectedValue: 'NONE',
                sortMode: 'DESCENDING_SMART', tagFilter: '*', type: 'PT_BRANCH' //列出git分支
}      

并行执行stage

window和linux的stage是并行执行的

stage("build, deploy and test on Windows and Linux") {
    parallel {
        stage("windows") {
            stages {
                stage("build") {
                    steps {
                        timestamps {
                            echo "build on windows."
                        }
                    }
                }
                stage("deploy") {
                    steps {
                        timestamps {
                            echo "deploy on windows."
                        }
                    }
                }
            }
        }

        stage("linux") {
            stages {
                stage("build") {
                    steps {
                        timestamps {
                            echo "build on linux."
                        }
                    }
                }
                stage("deploy") {
                     steps {
                         timestamps {
                             echo "deploy on linux."
                         }
                    }
                }
            }
        }
    }
}      

触发下游job构建

上游Job需有VERSION参数

JOB_NAME是Jenkins内置变量,代表当前Job的名字

下游job需有JOB参数

build job: '下游job名字', parameters: [string(name: 'version', value: env.VERSION),string(name: 'JOB', value: env.JOB_NAME)], propagate: false, wait: false      

声明式和脚本式均可使用

​注释​

单行注释:用双左斜线(//)

多行注释

/** 多行注释:
     * 第一行
     * 第二行
     */      

​执行shell脚本​

sh '''
    shell命令
'''
或者
sh """
    shell命令
"""      

单引号与双引号的区别

单引号:(shell优先)

获取shell变量——${key}
不能获取groovy通过def定义的变量
可以获取参数化定义的值
shell自身定义的变量会覆盖jenkins参数化定义的变量      

双引号:(def定义的优先)

获取groovy定义的变量——${key}
获取shell变量——\${key}    #需要通过\进行转义      

建议:声明式流水线用三单引号,脚本式流水线用三双引号

​到指定目录下执行​

dir('docker') {
    xxxxx
}      

​sshPublisher​

source /etc/profile
java -jar app.jar &      
sshPublisher(publishers: [sshPublisherDesc(configName: 'java_161', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''
                source /etc/profile
                java -jar app.jar &
                ''', 
                execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/opt/', 
                remoteDirectorySDF: false, removePrefix: 'backend/', sourceFiles: 'backend/app.jar')], 
                usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])      

常用指令

deleteDir()   #删除WORKSPACE      

继续阅读