Jenkins触发远程Job的几种方式
本文叙述基于以下假设前提,将介绍三种在不同的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的几种方式的更多相关文章
- Rsyslog远程传输的几种方式
基本介绍 Rsyslog是一个syslogd的多线程增强版,rsyslog vs. syslog-ng 链接是rsyslog官方和syslog特性和性能上的一些对比,目前大部分Linux发行版本默认也 ...
- 连接远程服务器的几种方式/Vscode + Remote
连接远程服务器的几种方式 前言 最近在尝试做网盘,使用的技术栈大概是 .net core + MVC + Mysql + Layui,主要目的是通过这个具体的项目,熟悉熟悉 .net core 开发, ...
- 设备程序远程升级采用两种方式(优先采用IP方式)
设备程序远程升级采用两种方式(优先采用IP方式): 采用应急广播TS流传输技术规范的消息内容表携带升级包数据.当辅助数据类型值为44时,消息内容表传输的数据为程序升级包. 采用IP方式传输升级包数据. ...
- LinkServer--访问远程数据表三种方式
在TSQL中访问远程数据库有三种方式:1.OPENROWSET2.OPENDATASOURCE3.LinkServer 在使用openrowset/opendatasource前搜先要启用Ad Hoc ...
- git 拉取指定的远程分支(三种方式)
直接拉取 git clone -b ants git@github.com:Ants-double/CareerJava.git git clone -b 远程分支名 仓库地址 本地已经有相关的仓库代 ...
- PHP获取远程文件的几种方式
1.fopen() 2.file_get_contents() 3.fsocket() 4.curl()
- jenkins 新增节点的3种方式
1.通过ssh建立节点(在节点机子上要安装好jdk) (1)通过用户+密码建立ssh连接 (2)通过用户+密钥建立连接 2.通过jnlp,javaweb的方式连接 (1)创建好节点 (2)在节点的机子 ...
- nodejs触发事件的两种方式
nodejs触发事件的两种方式: 方式之一:通过实例化events.EventEmitter //引入events模块 var events = require('events'); //初始化eve ...
- jenkins:一个jenkins项目远程触发另一个jenkins项目构建配置
很多时候,我们会有这样的应用场景:一个jenkins上的项目构建后,需要远程触发另一台机子上的jenkins中某个项目的构建,可以通过Parameterized Remote Trigger Conf ...
随机推荐
- busybox devmem 直接获取、修改内存信息
/********************************************************************** * busybox devmem 直接获取.修改内存信息 ...
- sudo with no password
/********************************************************************************* * sudo with no pa ...
- python三大框架之一flask应用
创建一个python项目 第一步:打开pytharm 第二步:创建pure python 类型的项目 第三步:创建项目完成之后选择之前创建的py3_flack 作为虚拟环境 第四步:路径可以通过在制定 ...
- 如何在git上创建的本地仓库
一.安装git(在git) 二. 三.输入个人信息(代码提交者) git config --global user.name "xxxx" git config --global ...
- C++学习(九)(C语言部分)之 项目 推箱子游戏
游戏制作 推箱子 步骤分析 1.模板 2.模板分析 组成元素: 空地 墙 人 目的地 箱子 背景 3.如何操作 通过WASD键盘操作人,推着箱子,到达目的地,游戏结束,如果箱子卡在死角则游戏失败 4. ...
- 实验吧—Web——WP之 简单的sql注入之2
直接打开解题连接: 既然是SQL注入,那么我们就要构造注入语句了,这个就要有耐心一个一个去尝试了 输入语句 1'and 1=1 # 和 1'and/**/1=1/**/#后 对比一下,发现是过滤掉了空 ...
- spring事务中出现oracle游标溢出的解决方案
本例事务中大量查询SQL语句,会导致oracle游标溢出:对于数据库游标出现解决方案:1.大量查询SQL语句取消事务,只针对插入/更新 做事务处理2.用临时表代替大量查询SQL语句推荐使用第二种方案
- Java中的权限学习笔记
1.Java中的权限有两个层次,一个是类这一层,另一个是类成员那一层. 类这一层: public class可以在本包内被访问,也可以在包外被访问.而没有被public修饰的class只能在本包内被调 ...
- nginx unit 1.8 支持基于java servlet 的开发模型
最近unit 1.8 发布了,有两个比较大的新特性,内部请求路由,以及java servlet 容器应用的开发 内部请求路由配置参考 { "routes": [ { "m ...
- 概率论基础教程 (Sheldon M. Ross 著)
第1章 组合分析 1.1 引言 1.2 计数基本法则 1.3 排列 1.4 组合 1.5 多项式系数 *1.6 方程的整数解个数 第2章 概率论公里 2.1 引言 2.2 样本空间和事件 2.3 概率 ...