Jenkins Pipeline触发机制

作者: 潘晓华Michael | 来源:发表于2019-04-23 16:48 被阅读24次
    Jenkins Pipeline

    设置好了功能强大的流水线后,接下来我们要做的就是去执行流水线,如果都靠手动去触发流水线,显然不符合带着自动化基因新一代工程师的风格,必须自动触发。
    那么Jenkins的Pipeline支持哪些触发机制呢。一起来看一下。

    定时触发:cron

    cron规则与crontab的规则是一样的

    pipeline{
        agent any
        triggers{
            cron('0 0 * * *')
        }
        stages{
            stage('半夜触发'){
                steps{
                    echo "凌晨执行"
                }
            }
        }
    }
    

    轮询代码仓库

    周期性检查代码,看代码是否有更新。这种方式需要使用

    pipeline{
        agent any
        triggers{
            pollSCM('* * * * *')
        }
        stages{
            stage('每分钟检查'){
                steps{
                    echo "每分钟检查代码仓库是否更新"
                }
            }
        }
    }
    

    由上游任务触发

    pipeline{
        agent any
        triggers{
            upstream(upstreamProjects: 'job1,job2', threshold: hudson.model.Result.SUCCESS)
        }
        stages{
            stage('上游触发'){
                steps{
                    echo "当job1或job2执行成功时,触发该流水线"
                }
            }
        }
    }
    

    hudson.model.Result包括以下状态:
    ABORTED:任务被手动中止
    FAILURE:构建失败
    SUCCESS:构建成功
    UNSTABLE:存在一些错误,但构建没失败
    NOT_BUILT:多阶段构建时,前面阶段问题导致后面阶段无法执行

    GitLab通知触发

    详情请在插件Gitlab plugin的github页面上查看

    pipeline{
        agent any
        triggers{
            gitlab(
                triggerOnPush: true, 
                triggerOnMergeRequest: true,
                branchFilterType: 'All',
                secretToken: "abcdxxxfa")
        }
        stages{
            stage('构建'){
                steps{
                    echo "gitlab 触发"
                }
            }
        }
    }
    

    将构建状态信息推送到GitLab

    1. 在Jenkins的系统设置中,Gitlab选项下填入Gitlab信息。例Connection name设为gitlab
    2. 按提示设置Gitlab的凭证,以对话框中输入Gitlab平台获取的API token
    3. 在pipeline的post部分,将构建结果更新到Gitlab相应的commit记录下,同时还需要在options参数中加入gitLabConnection配置
    pipeline{
        agent any
        triggers{
            gitlab(
                triggerOnPush: true, 
                triggerOnMergeRequest: true,
                branchFilterType: 'All',
                secretToken: "abcdxxxfa")
        }
        stages{
            stage('构建'){
                steps{
                    echo "gitlab 触发"
                }
            }
        }
        post{
            failure{
                updateGitlabCommitStatus name: 'build', state: 'failed'
            }
            success{
                updateGitlabCommitStatus name: 'build', state: 'success'
            }
        }
        options{
            gitLabConnection('gitlab')
        }
    }
    

    Generic Webhook Trigger插件触发

    Generic Webhook Trigger是一个通用的通过Webhook的方式触发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('自定义触发'){
                steps{
                    echo "Generic 触发"
                }
            }
        }
    }
    

    然后通过POST请求触发

    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
    

    触发条件依靠:tokenregexpFilterTextregexpFilterExpression三个参数。首先token必须匹配,其次regexpFilterText指定的key对应的值满足regexpFilterExpression表达式。

    参考资料

    《Jenkins 2.X实践指南》

    相关文章

      网友评论

        本文标题:Jenkins Pipeline触发机制

        本文链接:https://www.haomeiwen.com/subject/thavgqtx.html