Jenkins學習筆記第八篇pipeline機制

鹿少年發表於2020-11-11

jenkins pipeline機制:

每一個check-in 都會觸發pipeline的執行,每一個階段的狀態對組內成員都可見 每一個階段都會給一個及時反饋,每一次最後的stable版本都可以完成一次釋出

pipleline專案建立,首先安裝pipeline相關外掛

在建立的第一個pipeline中使用預設給定script:

node {
    def mvnHome
    stage('Preparation') { // for display purposes
        // Get some code from a GitHub repository
        git 'https://github.com/jglick/simple-maven-project-with-tests.git'
        // Get the Maven tool.
        // ** NOTE: This 'M3' Maven tool must be configured
        // **       in the global configuration.
        mvnHome = tool 'M3'
    }
    stage('Build') {
        // Run the maven build
        withEnv(["MVN_HOME=$mvnHome"]) {
            if (isUnix()) {
                sh '"$MVN_HOME/bin/mvn" -Dmaven.test.failure.ignore clean package'
            } else {
                bat(/"%MVN_HOME%\bin\mvn" -Dmaven.test.failure.ignore clean package/)
            }
        }
    }
    stage('Results') {
        junit '**/target/surefire-reports/TEST-*.xml'
        archiveArtifacts 'target/*.jar'
    }
}

pipeline語法:

agent:定義pipeline執行節點
引數:
   必須出現的指令
   any 可以使任意agent上執行pipeline
   none pipeline將不分配全域性agent 每個stage分配自己的agent
   label 指定執行節點的label
   node 自定義執行節點配置
     指定label
     指定customWorkspace
   docker 控制目標節點上的docker執行相關內容
   pipeline{
    agent{
        nodee{
            label 'master'
            customWorkspace "pipelineWorspace"
        }
    }
}

stages:包含一個或多個stage的序列,pipeline的大部分工作在此執行
       必須出現指令
       無引數
       每個pipeline只有一個stages
stage 包含在stages中,pipeline完成的所有實際工作都需要包含在stage中

triggers 定義了pipeline自動化觸發方式
 引數:
   cron 接收一個crontab風格的字串來定義pipeline觸發的常規時間
   pollScm 接受一個crontab風格的字串來定義jenkins檢查scm源更改的常規時間
   ,如果存在新的更改,則pipeline將重新觸發
  例子:
  pipeline{
    agent{
        node{
            label 'master'
            customWorkspace 'myworkspace'
        }
    }
    triggers{
        cron('H/2 * * * *')
    }
    parameters{
        string(name:'PERSON' ,defaultValue: 'jenkins',description:'輸入字串')
    }
}

關於crontab時間格式參考:五段 分 時 日 月 周
H/30 * * * * * 每30分鐘構建一次
H H/2 * * *每兩個小時構建一次
0 8 * * * 每天八點構建一次
0 8,12,22 * * * 每天8,12,22點構建,一天構建3次
H/3 0-23 * * * 每三分鐘構建一次,每天0-23:59執行任務


environment 定義pipeline或stage執行時的環境變數
引數 
    不是必須出現的命令
    無引數
environment{
    hlw='hello world'
}
stages{
    stage('print environment_1'){
        steps{
            echo hlw
        }
    }
    stage('print environment_2'){
        steps{
            sh 'echo ${hlw}'
        }
    }
}

pipeline{
    agent{
        node{
             label 'master'
             customWorkspace 'myworkspace'
        }
    }
    environment{
       hlw='hello world'
    }
    stages{
        stage('print environment_1'){
            steps{
                echo hlw
                sleep 5
            }
        }
        stage('print environment_2'){
            steps{
                sh 'echo ${hlw}'
                sleep 5
            }
        }
    }
    post{
    success{
        echo 'sync goodbay'
        sleep 5
    }
    failure{

    }
    unstable{

    }
}

}

options:定義pipeline的專有屬性
引數:
    不是必須的指令
     buildDiscarder 保持構建的最大個數
     disableConcurrentBuilds 不允許並行執行pipeline任務
     timeout:pipeline超時時間
     retry 失效後,重試整個pipeline生成的所有控制檯輸出時間
     skipStageAfterUnstable:一旦構建狀態進入了 unstable 狀態就跳過此stage
pipeline{
    agent{
    node{
        label 'master'
        customWorkspace 'pipelineWorkspace'
        }
    }
    option{
        buildDiscarder(logRotator(numToKeepStr:'2'))
    }
}

parameters定義pipeline的專有引數列表
引數:    
    不是必須出現的命令
    支援資料型別 booleanParam choice credentials file text password
    
pipeline{
    agent{
    node{
        label 'master'
        customWorkspace 'pipelineWorkspace'
        }
    }
    option{
        buildDiscarder(logRotator(numToKeepStr:'2'))
    }
    parameters{
        string(name:'PERSON',defaultValue:'',description:'')
    }
    stages{
        stage('Test parameters'){
            steps{
                echo "Hello ${params.PERSON}"
            }
        }
    }
}
 

相關文章