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 ...
随机推荐
- hadoop day 4
1.自定义的一种数据类型,要在hadoop的各个节点之间传输,应该遵循hadoop的序列化机制 就必须实现hadoop相应的序列化接口Writable 实现的方法包括:write(),readFiel ...
- Django之静态文件配置
在项目目录中打开settings.py,在最下面配置静态文件(css文件,js文件以及其他静态配置文件),比如说html使用到了jQuery框架,我们要在项目根目录下创建statics(可自定义),将 ...
- 在django中进行MySQL入库
在django中进行mysql 入库 需要导入 : from django.db import models 在添加主键时,需要使用: primary_key=True id = models. ...
- 软件安装配置笔记(一)——Oracle及PLSQL Developer的安装与配置
一.Oracle: Oracle服务器端或桌面端可以创建本地的Oracle数据库,而Oracle客户端是用来远程连接其他服务器或电脑上的Oracle服务器端或桌面端的,安装客户端软件只需配置网络连接文 ...
- python day 09 文件操作
一 初识文件操作 使⽤用python来读写⽂文件是非常简单的操作. 我们使⽤用open()函数来打开⼀一个⽂文件, 获取到⽂文件句句柄. 然后通过⽂文件句句柄就可以进⾏行行各种各样的操作了了. 根据打 ...
- EasyUI datagrid 数据加载
网上找了好多人的方法发现都有问题发一个可用方便的 主要分三种情况 加载1,loaddata 加载2,datagrid 加载3, url 加载 第一部分,datagrid加载 第二部分,点击 datag ...
- 20165313 《Java程序设计》第七周学习总结
教材学习总结 1.下载安装MySQL数据库管理系统. 2.MySQL数据库基本操作. 3.利用JAVA程序对MySQL数据库系统进行查找,更新,添加和删除操作. 学习中的问题与解决方案 1.运行书上安 ...
- Redis(三)源source编译
背景: 自己电脑是win7 32bit的,而想要Redis4.0的版本,但是在网上没找到,所以自己干脆download源source,自己build,安装. 最后,目前达到的状态是,windows下s ...
- ionic局部刷新页面与刷新整个页面
1.全局刷新,禁用缓存: 在app.js中设置cach:false,如下: .state('material', { url: '/material', cache:false, templateUr ...
- CH#46A 磁力块
题意 磁力块 CH Round #46 - 「Adera 8」杯NOI模拟赛 描述 在一片广袤无垠的原野上,散落着N块磁石.每个磁石的性质可以用一个五元组(x,y,m,p,r)描述,其中x,y表示其坐 ...