乐趣区

关于云计算:远程触发Jenkins的Pipeline任务

场景

  • 尽管能配置提交代码时触发 Jenkins 工作,但有时并不需要每次提交代码都触发,而是仅在有须要时才执行。
  • 除了在 Jenkins 页面上手动执行工作,还能够向 Jenkins 网站发动 HTTP 申请,触发指定工作的执行,本文就来实战通过 Http 申请同时触发多个 Jenkins 工作执行。

概述

对于 pipeline 类型的 Jenkins 工作,个别是通过插件
<font color=”blue”>Generic Webhook Trigger</font> 来反对近程触发的,在应用过程中以下三点须要留神:

  1. 近程触发 Jenk 工作,申请的 URL 怎么写;
  2. Http 申请的参数,如何作为 pipeline 脚本的参数;
  3. 假如有 Jenkins 工作 A,某时刻有 10 个触发该工作的申请同时达到,Jenkins 如何解决?(前面会重点探讨此问题)

针对上述问题,咱们来做一次实战:向 Jenkins 服务发动 http 申请,申请参数是一个 Github 代码仓库的地址和分支名,Jenkins 收到这个申请后,执行一个 pipeline 工作,该工作是下载指定的 Github 仓库的代码,流程如下图所示;

环境信息

  1. 操作系统:CentOS 7.7
  2. Jenkins:2.190.3
  3. Generic Webhook Trigger 插件:1.66

对于 Jenkins 的部署,请参考文章《》

实战

  1. 先来装置插件 <font color=”blue”>Generic Webhook Trigger</font>,如下图,进入插件治理页面:

  1. 装置插件的操作步骤如下图所示,请依照红框数字的程序操作:

  1. 稍等片刻,插件在线装置胜利,如下图,接下来创立个 pipeline 工作试试:

  1. 新建名为 remote-test 的 pipeline 工作:

  1. 如下图红框所示,呈现了 <font color=”blue”>Generic Webhook Trigger</font> 选项:

  1. 勾选了 <font color=”blue”>Generic Webhook Trigger</font> 之后页面会发生变化,如下图,在红框地位,先设置 token 的值为 <font color=”blue”>token-remote-test</font>,这样 http 申请中的 token 参数的值如果等于 <font color=”blue”>token-remote-test</font>,就会触发当前任务:

  1. 接下来设置申请参数,如下图红框所示,先输出固定的 ref 参数,而后再把 repositoryURL 和 branch 也设置好,即 Github 代码仓库地址和分支名,这样 http 申请中 repositoryURL 和 branch 参数就能传递到前面的 pipeline 脚本中去了:

  1. 接下来能够写 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

  1. 上述 pipeline 脚本写在下图红框地位,而后点击底部的 ”Save” 按钮保留:

  1. 工作配置实现,接下来用 postman 发动 http 申请;
  2. 我这边 jenkins 网站的地址是:http://192.168.133.149:32049,因而触发工作的申请地址是:http://192.168.133.149:32049/generic-webhook-trigger/invoke?token=token-remote-test,留神 token 参数的值和工作设置中的 token 值保持一致就能触发工作;
  3. 在 Postman 上的配置如下图所示,请依照数字程序配置,repositoryURL 参数的值为 https://github.com/zq2599/jen…,这是我放在 Github 上的一个 java 工程,能够失常下载:

  1. 配置实现后点击 Send 按钮发送申请,失常状况下收到的返回码是 200,如下图红框,如果非 200(例如 404),请查看参数和 Jenkins 工作的参数设置 (例如 token 不统一):

  1. 回到 Jenkins 页面查看日志,如下图红框,申请参数都被打印进去了:

  1. 持续往下看,可见 Github 源码胜利下载:

  • 至此,通过 Http 触发 Jenkins 的 pipeline 实战就实现了,咱们能够通过程序、脚本等各种伎俩,依照不同的需要来触发 Jenkins 工作,并传给工作不同的参数。

并发问题

  • 近程触发 Jenkins 工作尽管灵便不便,然而在解决并发申请时会有问题:10 个申请同时达到,只有一个会执行,这个问题的破解办法留在下一篇文章《近程触发 Jenkins 的 Pipeline 工作的并发问题解决》具体探讨吧。

https://github.com/zq2599/blog_demos

退出移动版