天天看點

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      

繼續閱讀