跨Jenkins调用downstream Pipeline

目录

    • 意义
    • 流程介绍
    • 在Jenkins Job中调用downstream pipeline
    • 为Jenkins no.2 创建用户实现API触发Pipeline
    • 为Jenkins no.2的PipelineJob设置API触发token
    • 在Job中跨Jenkins调用Upstream Pipeline

意义

如果你因为某些原因不得不构建多个独立的Jenkins服务,同时又希望能够跨Jenkins调用其中某些pipeline,使之能够成为一条连贯的发布流程,本文也许能够给你一些帮助。当然,如果你只想简单的将upstream与downstream设置在同一个Jenkins中,本文也会教你如何实现。
文章中Jenkins Pipeline的修改尽量集中在代码中,更易于迁移。

流程介绍

假设有2个Jenkins分别为test/prelive与live环境工作,我们需要在服务部署之前做一些数据准备工作,而这些准备工作并不需要人工审核,只要保证在服务部署之前完成就好。

Fri 06 06:00 12:00 06:00 Sat 07 06:00 12:00 06:00 Mar 08 06:00 12:00 06:00 Mon 09 test job prelive job live job Jenkins no.1 Jenkins no.2 Jenkins flow

在Jenkins Job中调用downstream pipeline

  1. 在Jenkins no.1 中创建两个Pipeline,分别叫做 test-data-preparing ; prelive-data-preparing
  2. 修改test-data-preparing的代码如下,使之触发相同Jenkins中的Job
pipline {
    ...
    stages {
        stage('trigger-upstream'){
            steps{
                script {
                   # 调用downstream 传递参数, 并且不等待其运行结果
                    build job: 'prelive-data-preparing',
                        parameters: [
                            string(name: '***', value: '***'),
                            booleanParam(name: '***' , value: '***'),
                        ], wait : false
                }
            }
        }
   }
   ...
}

为Jenkins no.2 创建用户实现API触发Pipeline

  1. 在Jenkins控制台-ManageUsers中创建用户live-datapreparing
  2. 在Jenkins控制台-Manage and Assign Roles-Manage Roles中创建角色live-datapreparing,赋予对live-data-preparing job 的build权限
    创建角色
  3. 在Jenkins控制台-Manage and Assign Roles-Assign Roles 中为用户绑定角色
  4. 切换至新创建用户登录Jenkins控制台,点击右上角自己的名字进入用户设置(此处可能需要提前赋予此用户readonly权限以防其无法登录,此步骤后可以收回权限)
  5. 此用户创建token用于身份验证
    跨Jenkins调用downstream Pipeline_第1张图片

为Jenkins no.2的PipelineJob设置API触发token

为需要触发的Job配置远程调用的token
跨Jenkins调用downstream Pipeline_第2张图片

在Job中跨Jenkins调用Upstream Pipeline

修改Jenkins no.1 中prelive-data-preparing的代码如下,使之远程触发Jenkins no.2 中的Job

pipline {
    ...
    stages {
        stage('trigger-upstream'){
            steps{
                script {
                    sh "curl -X POST 'http://live-datapreparing [jenkinsUser] :***** [UserToken] @*** [JenkinsURL] /job/live-data-preparing/buildWithParameters?token=*** [jobToken] &Image_Tag=${Image_Tag} [Parameters] ' "
                }
            }
        }
   }
   ...
}

你可能感兴趣的:(Jenkins学习)