Jenkins Pipeline觸發(fā)機(jī)制

Jenkins Pipeline

設(shè)置好了功能強(qiáng)大的流水線后,接下來(lái)我們要做的就是去執(zhí)行流水線,如果都靠手動(dòng)去觸發(fā)流水線,顯然不符合帶著自動(dòng)化基因新一代工程師的風(fēng)格,必須自動(dòng)觸發(fā)。
那么Jenkins的Pipeline支持哪些觸發(fā)機(jī)制呢。一起來(lái)看一下。

定時(shí)觸發(fā):cron

cron規(guī)則與crontab的規(guī)則是一樣的

pipeline{
    agent any
    triggers{
        cron('0 0 * * *')
    }
    stages{
        stage('半夜觸發(fā)'){
            steps{
                echo "凌晨執(zhí)行"
            }
        }
    }
}

輪詢代碼倉(cāng)庫(kù)

周期性檢查代碼,看代碼是否有更新。這種方式需要使用

pipeline{
    agent any
    triggers{
        pollSCM('* * * * *')
    }
    stages{
        stage('每分鐘檢查'){
            steps{
                echo "每分鐘檢查代碼倉(cāng)庫(kù)是否更新"
            }
        }
    }
}

由上游任務(wù)觸發(fā)

pipeline{
    agent any
    triggers{
        upstream(upstreamProjects: 'job1,job2', threshold: hudson.model.Result.SUCCESS)
    }
    stages{
        stage('上游觸發(fā)'){
            steps{
                echo "當(dāng)job1或job2執(zhí)行成功時(shí),觸發(fā)該流水線"
            }
        }
    }
}

hudson.model.Result包括以下?tīng)顟B(tài):
ABORTED:任務(wù)被手動(dòng)中止
FAILURE:構(gòu)建失敗
SUCCESS:構(gòu)建成功
UNSTABLE:存在一些錯(cuò)誤,但構(gòu)建沒(méi)失敗
NOT_BUILT:多階段構(gòu)建時(shí),前面階段問(wèn)題導(dǎo)致后面階段無(wú)法執(zhí)行

GitLab通知觸發(fā)

詳情請(qǐng)?jiān)诓寮?a target="_blank" rel="nofollow">Gitlab plugin的github頁(yè)面上查看

pipeline{
    agent any
    triggers{
        gitlab(
            triggerOnPush: true, 
            triggerOnMergeRequest: true,
            branchFilterType: 'All',
            secretToken: "abcdxxxfa")
    }
    stages{
        stage('構(gòu)建'){
            steps{
                echo "gitlab 觸發(fā)"
            }
        }
    }
}

將構(gòu)建狀態(tài)信息推送到GitLab

  1. 在Jenkins的系統(tǒng)設(shè)置中,Gitlab選項(xiàng)下填入Gitlab信息。例Connection name設(shè)為gitlab
  2. 按提示設(shè)置Gitlab的憑證,以對(duì)話框中輸入Gitlab平臺(tái)獲取的API token
  3. 在pipeline的post部分,將構(gòu)建結(jié)果更新到Gitlab相應(yīng)的commit記錄下,同時(shí)還需要在options參數(shù)中加入gitLabConnection配置
pipeline{
    agent any
    triggers{
        gitlab(
            triggerOnPush: true, 
            triggerOnMergeRequest: true,
            branchFilterType: 'All',
            secretToken: "abcdxxxfa")
    }
    stages{
        stage('構(gòu)建'){
            steps{
                echo "gitlab 觸發(fā)"
            }
        }
    }
    post{
        failure{
            updateGitlabCommitStatus name: 'build', state: 'failed'
        }
        success{
            updateGitlabCommitStatus name: 'build', state: 'success'
        }
    }
    options{
        gitLabConnection('gitlab')
    }
}

Generic Webhook Trigger插件觸發(fā)

Generic Webhook Trigger是一個(gè)通用的通過(guò)Webhook的方式觸發(fā)pipeline的插件

pipeline{
    agent any
    triggers{
        GenericTrigger(
            genericVariables: [
                key: 'ref', value: '$.ref'
            ],
            token: 'secret',

            causeString: 'Triggered on $ref',
            printContributedVariables: true,
            printPostContent: true,
                        regexpFilterText: '$ref',
                        regexpFilterExpression: 'refs/heads(master|dev)'
        )
    }
    stages{
        stage('自定義觸發(fā)'){
            steps{
                echo "Generic 觸發(fā)"
            }
        }
    }
}

然后通過(guò)POST請(qǐng)求觸發(fā)

curl -X POST -H "Content-Type: application/json" -d '{"ref": "refs/heads/master" }' -vs http://jenkins.local:8080/jenkins/generic-webhook-trigger/invoke?token=secret

觸發(fā)條件依靠:token、regexpFilterText、regexpFilterExpression三個(gè)參數(shù)。首先token必須匹配,其次regexpFilterText指定的key對(duì)應(yīng)的值滿足regexpFilterExpression表達(dá)式。

參考資料

《Jenkins 2.X實(shí)踐指南》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容