场景
- 尽管能配置提交代码时触发Jenkins工作,但有时并不需要每次提交代码都触发,而是仅在有须要时才执行。
- 除了在Jenkins页面上手动执行工作,还能够向Jenkins网站发动HTTP申请,触发指定工作的执行,本文就来实战通过Http申请同时触发多个Jenkins工作执行。
概述
对于pipeline类型的Jenkins工作,个别是通过插件
<font color="blue">Generic Webhook Trigger</font>来反对近程触发的,在应用过程中以下三点须要留神:
- 近程触发Jenk工作,申请的URL怎么写;
- Http申请的参数,如何作为pipeline脚本的参数;
- 假如有Jenkins工作A,某时刻有10个触发该工作的申请同时达到,Jenkins如何解决?(前面会重点探讨此问题)
针对上述问题,咱们来做一次实战:向Jenkins服务发动http申请,申请参数是一个Github代码仓库的地址和分支名,Jenkins收到这个申请后,执行一个pipeline工作,该工作是下载指定的Github仓库的代码,流程如下图所示;
环境信息
- 操作系统:CentOS 7.7
- Jenkins:2.190.3
- Generic Webhook Trigger插件:1.66
对于Jenkins的部署,请参考文章《》
实战
- 先来装置插件<font color="blue">Generic Webhook Trigger</font>,如下图,进入插件治理页面:
- 装置插件的操作步骤如下图所示,请依照红框数字的程序操作:
- 稍等片刻,插件在线装置胜利,如下图,接下来创立个pipeline工作试试:
- 新建名为remote-test的pipeline工作:
- 如下图红框所示,呈现了<font color="blue">Generic Webhook Trigger</font>选项:
- 勾选了<font color="blue">Generic Webhook Trigger</font>之后页面会发生变化,如下图,在红框地位,先设置token的值为<font color="blue">token-remote-test</font>,这样http申请中的token参数的值如果等于<font color="blue">token-remote-test</font>,就会触发当前任务:
- 接下来设置申请参数,如下图红框所示,先输出固定的ref参数,而后再把repositoryURL和branch也设置好,即Github代码仓库地址和分支名,这样http申请中repositoryURL和branch参数就能传递到前面的pipeline脚本中去了:
- 接下来能够写pipeline脚本了:
pipeline { agent any triggers { GenericTrigger( genericVariables: [ [key: 'ref', value: '$.ref'], [key: 'repositoryURL', value: '$.repositoryURL'], [key: 'branch', value: '$.branch'] ], token: 'token-remote-test' , causeString: '$ref' , printContributedVariables: true, printPostContent: true ) } stages { stage('show-param') { steps { echo 'token参数:$token' echo '代码仓库:$repositoryURL' echo '代码分支:$branch' } } stage('down-sourcecode') { steps { echo '开始下载源码' checkout([$class: 'GitSCM', branches: [[name: '*/$branch']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: '$repositoryURL']]]) } } }}
上述脚本有以下几个关键点:
a. triggers 、GenericTrigger、genericVariables这几个参数是固定的,按上述示例去写即可;
b. printContributedVariables、printPostContent为true,会在执行工作时打印出申请参数的内容来;
c. 这里一共有两个stage,在<font color="blue">show-param</font>执行的时候,会将http申请参数全副打印进去;
d. <font color="blue">checkout</font>是pipeline提供的API,用于下载Github仓库的代码,其branches参数的值用上了http的申请参数branch,userRemoteConfigs.url参数的值用上了http的申请参数branchrepositoryURL
- 上述pipeline脚本写在下图红框地位,而后点击底部的"Save"按钮保留:
- 工作配置实现,接下来用postman发动http申请;
- 我这边jenkins网站的地址是:http://192.168.133.149:32049 ,因而触发工作的申请地址是:http://192.168.133.149:32049/generic-webhook-trigger/invoke?token=token-remote-test ,留神token参数的值和工作设置中的token值保持一致就能触发工作;
- 在Postman上的配置如下图所示,请依照数字程序配置,repositoryURL参数的值为https://github.com/zq2599/jen...,这是我放在Github上的一个java工程,能够失常下载:
- 配置实现后点击Send按钮发送申请,失常状况下收到的返回码是200,如下图红框,如果非200(例如404),请查看参数和Jenkins工作的参数设置(例如token不统一):
- 回到Jenkins页面查看日志,如下图红框,申请参数都被打印进去了:
- 持续往下看,可见Github源码胜利下载:
- 至此,通过Http触发Jenkins的pipeline实战就实现了,咱们能够通过程序、脚本等各种伎俩,依照不同的需要来触发Jenkins工作,并传给工作不同的参数。
并发问题
- 近程触发Jenkins工作尽管灵便不便,然而在解决并发申请时会有问题:10个申请同时达到,只有一个会执行,这个问题的破解办法留在下一篇文章《近程触发Jenkins的Pipeline工作的并发问题解决》具体探讨吧。
https://github.com/zq2599/blog_demos