本文叙述基于以下假设前提,将介绍三种在不同的jenkins服务器之间触发Job的方法:

本地Jenkins Server local.jenkins.com
远程Jenkins Server remote.jenkins.com
本地Jenkins Job名 local_job
远程Jenkins Job名
remote_job

需求 在local_job完成后自动触发remote_job
一、在remote_job上配置Build Trigger:
步骤:1.在Jenkins Web GUI上配置remote_job的Build Trigger为Trigger build remotely.(其他Build Triggers方式具体见文档,本文不赘述)

2. 在远程Jenkins Server上配置用户:

在Web上进入下面目录创建专用的Jenkins User:Jenkins>Manage Jenkins>Manage Users>Create User. 本文中创建的user为“remote_user”. 然后配置remote_user的API Token(创建完成后,logout当前user,然后以remote_user的身份登录,否则看不到remote_user的API Token),进入目录Jenkins>People>remote_user>Configure:

此时,在任何网络能够连接到remote.jenkins.com的地方都可以通过执行以下shell命令触发remote_job:

curl -X POST http://remote_user:22b990ddaf51b27476443e443f6f8f6d@remote.jenkins.com/job/remote_job/build?token=remoteToken
3. 如果想通过local_job触发remote job,只需要在local_job中添加一条上面的shell命令即可实现。

二. 从local_job远程触发remote_job
这种方法本质上和第一种方法相同,区别在于第一种方法是在remote_job上进行配置,而这种方法是通过local_job的pipeline实现.

步骤:1. 安装Plugin:Parameterized Remote Trigger. 在Jenkins Web GUI上,Jenkins>Manage Jenkins>Manage Plugin, 找到Parameterized Remote Trigger并安装.

2. 在本地Jenkins Server中配置Remote Trigger,认证方式推荐使用username+api token(由于username+password方式可能会由于安全要求经常变更),进入配置目录:Jenkins>Manage Jenkins>Configure System

4. local_job需要是一个pipeline project,使用Pipeline Syntax,填写需要的参数,生成pipeline代码即可(如果没有进行上一步的配置,也可以在Pipeline代码中指定这些配置信息,下图的情况是已经按照上一步进行了配置):

在local_job的pipeline中加上刚才生成的代码即可触发remote_job。

三. 通过检测远程文件变化间接触发
前两种方式都有一个前提,那就是本地Jenkins Server和远程Jenkins Server之间网络必须互通,如果他们分别在两个隔绝的网络环境中,则前两种方式是无法实现远程触发的。此时可以通过一个中间文件的内容作为标志,以决定是否触发remote_job.

本地Jenkins Servers上的任务local_job每次成功完成后,更新AWS S3上的文件s3://jenkins-trigger/REVISION的内容。

在远程Jenkins Server上,remote_job同级目录下新建一个pipeline Jenkins Job,命名为scanner,用它来调用remote_job,设定其每五分钟检测一次位于AWS S3上的文件s3://jenkins-trigger/REVISION的内容,与远程Jenkins Server上保存的该文件副本进行比较,如果内容不相同,则触发remote_job任务。

示例代码,在local_job中的pipeline代码:

node{
stage('upload new REVISION to S3'){
sh '''
echo `date` > ~/REVISION.local
'''
#credentialsId需要在本地Jenkins Server上设置为有权限上传文件到s3://jenkins-trigger/的AWS credentials.
wrap([$class: 'AmazonAwsCliBuildWrapper', credentialsId: 's3-trigger']) {
sh "aws s3 cp ~/REVISION.local s3://jenkins-trigger/REVISION"
}
}
}
示例代码,在scanner中的pipeline代码:

node{
#将S3上的文件REVISON(最新的内容),REVISION.old(上次触发remote时的内容)下载到remote.jenkins.com上并读取内容进行比较。
def current_revision
def old_revision
stage("check REVISION"){
wrap([$class: 'AmazonAwsCliBuildWrapper', credentialsId: 's3-trigger']) {
sh "aws s3 cp s3://jenkins-trigger/REVISION ./REVISION.s3"
sh "aws s3 cp s3://jenkins-trigger/REVISION.old ./REVISION.local"
}
current_revision = readFile("./REVISION.s3").trim()
old_revision = readFile("./REVISION.local").trim()
}
#如果REVISION和REVISION.old的内容不一样,则说明local_job被执行过,则应触发remote_job,每次触发remote_job之前,更新REVISION.old文件内容
stage("test"){
if (current_revision != old_revision){
wrap([$class: 'AmazonAwsCliBuildWrapper', credentialsId: 's3-trigger']) {
sh "aws s3 cp ./REVISION.s3 s3://jenkins-trigger/REVISION.old"
}
build job: "./remote_job"
}
}
}

Jenkins触发远程Job的几种方式的更多相关文章

  1. Rsyslog远程传输的几种方式

    基本介绍 Rsyslog是一个syslogd的多线程增强版,rsyslog vs. syslog-ng 链接是rsyslog官方和syslog特性和性能上的一些对比,目前大部分Linux发行版本默认也 ...

  2. 连接远程服务器的几种方式/Vscode + Remote

    连接远程服务器的几种方式 前言 最近在尝试做网盘,使用的技术栈大概是 .net core + MVC + Mysql + Layui,主要目的是通过这个具体的项目,熟悉熟悉 .net core 开发, ...

  3. 设备程序远程升级采用两种方式(优先采用IP方式)

    设备程序远程升级采用两种方式(优先采用IP方式): 采用应急广播TS流传输技术规范的消息内容表携带升级包数据.当辅助数据类型值为44时,消息内容表传输的数据为程序升级包. 采用IP方式传输升级包数据. ...

  4. LinkServer--访问远程数据表三种方式

    在TSQL中访问远程数据库有三种方式:1.OPENROWSET2.OPENDATASOURCE3.LinkServer 在使用openrowset/opendatasource前搜先要启用Ad Hoc ...

  5. git 拉取指定的远程分支(三种方式)

    直接拉取 git clone -b ants git@github.com:Ants-double/CareerJava.git git clone -b 远程分支名 仓库地址 本地已经有相关的仓库代 ...

  6. PHP获取远程文件的几种方式

    1.fopen() 2.file_get_contents() 3.fsocket() 4.curl()

  7. jenkins 新增节点的3种方式

    1.通过ssh建立节点(在节点机子上要安装好jdk) (1)通过用户+密码建立ssh连接 (2)通过用户+密钥建立连接 2.通过jnlp,javaweb的方式连接 (1)创建好节点 (2)在节点的机子 ...

  8. nodejs触发事件的两种方式

    nodejs触发事件的两种方式: 方式之一:通过实例化events.EventEmitter //引入events模块 var events = require('events'); //初始化eve ...

  9. jenkins:一个jenkins项目远程触发另一个jenkins项目构建配置

    很多时候,我们会有这样的应用场景:一个jenkins上的项目构建后,需要远程触发另一台机子上的jenkins中某个项目的构建,可以通过Parameterized Remote Trigger Conf ...

随机推荐

  1. Python学习笔记第十六周

    目录: 一.CSS补充 1.页面布局 二.JavaScript补充 1.条件判断 2.函数分类 3.序列化 4.转义 5.eval 6.时间 7.作用域 三.DOM 1.间接查找 文本操作 样式操作 ...

  2. 2017-2018-2 20165228 实验二《Java面向对象程序设计》实验报告

    2017-2018-2 20165228 实验二<Java面向对象程序设计>实验报告 相关知识点 三种代码 伪代码:注释,与具体编程语言无关 产品代码:由伪代码翻译而来的具体编程语言语法相 ...

  3. Unity等待写入数据

    EasyTouch中QuickGesture的用法 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Qu ...

  4. HPU组队赛L(没有标题。。)(贪心)

    时间限制 1 Second  内存限制  512 Mb 题目描述 给个字符串s和整数k.(字符串中只有0-9) 问至少修改字符串中的几位才可以让字符串的各个位之和大于等于k. 输入 第一行一个整数T表 ...

  5. HDU 1260:Tickets(DP)

    Tickets Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Su ...

  6. c++——数据结构

    1.写一个函数PrintN,使得传入一个N,打印从1到N的全部整数 #include<stdio.h> //循环实现 void PrintN(int N){ int i; ;i<=N ...

  7. if else的使用以及如何从键盘获取数值

    if-else的使用 顺序结构 顺序从上到下执行,中间没有判断和跳转 分支结构 根据条件,选择性地执行某段代码 有if-else和switch两种分支语句 循环结构 根据循环,重复性地执行某段代码 有 ...

  8. Python基础进程和线程

    一 背景知识 进程的概念起源于操作系统,是操作系统最核心的概念. 进程是对正在运行程序的一个抽象,操作系统的其他所有内容都是围绕进程的概念展开的.所以想要真正了解进程,必须事先了解操作系统,egon介 ...

  9. 重写&重载

    重写:子类对父类或接口中方法重新定义,是同一个方法 (1)子类不能重写final方法 (2)子类必须重写abstract方法 重载:一个类内部,方法同名,参数列表不同 (1)返回值不能作为区分重载方法 ...

  10. 下面的程序段创建了BufferedReader类的对象in,以便读取本机c盘my文件夹下的文件1.txt。File构造函数中正确的路径和文件名的表示是( )。

    下面的程序段创建了BufferedReader类的对象in,以便读取本机c盘my文件夹下的文件1.txt.File构造函数中正确的路径和文件名的表示是(    ). ./表示当前项目的路径../表示当 ...