本文叙述基于以下假设前提,将介绍三种在不同的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. PHP 设计模式系列 —— 工厂方法模式(Factory Method)(转)

    1.模式定义 定义一个创建对象的接口,但是让子类去实例化具体类.工厂方法模式让类的实例化延迟到子类中. 2.问题引出 框架需要为多个应用提供标准化的架构模型,同时也要允许独立应用定义自己的域对象并对其 ...

  2. 外部javascript

  3. C# Dictionary源码剖析---哈希处理冲突的方法有:开放定址法、再哈希法、链地址法、建立一个公共溢出区等

    C# Dictionary源码剖析 参考:https://blog.csdn.net/exiaojiu/article/details/51252515 http://www.cnblogs.com/ ...

  4. java-权限修饰符的区别

    说明:所谓访问权限,是指对象是否可以通过“.”运算符操作自己的变量或通过“.”运算符使用类中的方法. 1.Java中的四种访问修饰符:public.protected.default(无修饰符,默认) ...

  5. (19)模型层 -ORM之msql 跨表查询(正向和反向查询)

    基于对象的跨表查询 基于对象的跨表查询'''正向和反向查询'''# 正向 ----> 关联字段在当前表中,从当前表向外查叫正向# 反向 ---> 关联字段不在当前表中,当当前表向外查叫反向 ...

  6. ISCC的 Misc——WP

    比赛已经结束了,自己做出来的题也不是很多,跟大家分享一下 Misc 第一题:What is that? 下载链接; 打开 解压 是一个图片 因为分值很少所以题和简单 观察图片是一个向下指的手 说明fl ...

  7. 《DSP using MATLAB》Problem 5.11

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  8. Eclipse maven 错误修正方法:An error occurred while filtering resources

    最近打开Eclipse后发现项目报红叉,解决办法如下: 1.eclipse中删除该项目(注意:不要删除代码) 2.cmd,进入到项目目录下,执行命令:mvn eclipse:clean 3.重新导入项 ...

  9. LG3975 [TJOI2015]弦论

    题意 题目描述 为了提高智商,ZJY开始学习弦论.这一天,她在< String theory>中看到了这样一道问题:对于一个给定的长度为n的字符串,求出它的第k小子串是什么.你能帮帮她吗? ...

  10. Centos7安装teamviewer 32/64位

    centos7安装teamviewer teamviewer安装包,自己去官网下吧,不用找了,估摸着就没有Centos7 64位的 所以直接下centos teamviewer 32位那个rpm包吧 ...