共计 2785 个字符,预计需要花费 7 分钟才能阅读完成。
场景
- 尽管能配置提交代码时触发 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
正文完