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:[email protected]/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"
}
}
}

原文地址:https://www.cnblogs.com/jiangzhaowei/p/10031756.html

时间: 2024-10-11 16:41:28

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

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

连接远程服务器的几种方式 前言 最近在尝试做网盘,使用的技术栈大概是 .net core + MVC + Mysql + Layui,主要目的是通过这个具体的项目,熟悉熟悉 .net core 开发,.net 的未来就是他了! 但是作为一个菜鸟,还是希望自己的项目能在某个服务器上跑起来的(可能大多数学计算机的人都有过类似的想法吧),所以就在 vultr 上租了个 vps 打算实验了,顺便尝试一下各种 remote 方法吧! 必要的准备 首先你得有个VPS-- 阿里云,vultr,banwagon

远程调用的几种方式

在分布式服务框架中,最基础的问题就是远程服务是怎么通讯的.首先来看看计算机系统网络通信的基本原理,网络通信需要做的就是将流从一台计算机传输到另外一台计算 机,基于传输协议和网络IO来实现,其中传输协议有 tcp.udp等等,tcp.udp都是在基于Socket概念上为某类应用场景而扩展出的传输协议:网络IO,主要有bio. nio.aio三种方式,所有的分布式应用通讯都基于这个原理而实现,只是为了应用的易用,各种语言通常都会提供一些更为贴近应用易用的应用层协议.在java领域中知名的有:RMI.

Linux 远程桌面的两种方式

在绝多数情况下,Linux 不需要使用到GUI的桌面环境,但是有时在一些特殊的场景如安装Oracle的时候,需要有图形界面进行辅助才可以安装. 如果要使用Linux的图形界面,一般有两种方式: 1.Linux系统安装X Windows图形界面,使用vnc远程. 2.Linux系统启用X协议,配置X Clent,本地有桌面环境的机器(如Windows)配置X Server,获取远程的信息,在本地X server上显示图形界面. 方法一: 本机安装图形界面 这里以CentOS6.5的机器为例,安装图

3 gogs+jenkins 触发远程构建及tomcat管理war包替换

环境 centos7 一.gogs安装---这里采用git用户,实际我是用root 安装在/usr/local/gogs下的 1.添加用户,设置sudo,查看内核版本信息,确认架构,下载相应的安装包 useradd git #添加用户 vim /etc/sudoer git    ALL=(ALL)    NOPASSWD:ALL #添加这行在执行sudo时无需密码 如不能编辑更改文件只读权限为读写 chmod u+w /etc/sudoer #改回去 chmod u-w /etc/sudoer

php获取远程图片的三种方式

1:file_get_contents,file_put_contents方式 <?php function download_remote_file($file_url, $save_to) { $content = file_get_contents($file_url); file_put_contents($save_to, $content); }?> 用法: <?php download_remote_file('http://www.54ux.com/wp-content/

SSH远程管理、参数讲解、xshell使用、scp,sftp,ssh命令(ssh两种方式的密钥验证方

1.SSH远程管理 SSH(Secure Sheel)是一种安全通道协议,主要用于实现字符界面的远程登录.远程复制等功能.SSH协议对通信双方的数据传输进行了加密处理,其中包括用户的口令.与早期的TELNET(远程登录,tcp23端口).RSH(Remote Sheel,远程执行命令).RCP(Remote File Copy,远程文件复制)等应用想必,SSH协议提供了更好的安全性. 配置OpenSSH服务端(由openssh.openssh-server软件包提供.主配置文件/etc/ssh/

十四、Android学习笔记_Android回调函数触发的几种方式 广播 静态对象

一.通过广播方式: 1.比如登录.假如下面这个方法是外界调用的,那么怎样在LoginActivity里面执行登录操作,成功之后在回调listener接口呢?如果是平常的类,可以通过构造函数将监听类对象传入即可.但是在Activity中不能传递监听对象,所以考虑使用广播来实现. public void login(final LoginOnClickListener listener) { Intent intent = new Intent(context, LoginActivity.clas

jenkins构建触发器详解-不登录触发远程构建

利用jenkins的远程构建功能,我们可以使用任何脚本,甚至定制一个Web页来控制Job的执行,但是远程构建你如果直接使用的话,老是需要登录才能执行,如何避免登录?稍微折腾了一下,调通了. 1.首先去系统管理->管理插件里边,搜索并安装插件 Build Authorization Token Root Plugin,不会安装插件的先去搜一下,安装好后如下图: 2.然后点击右上角,你登录的用户名,再点击设置,找到API Token,复制下来你这个用户的Token,用于远程访问Job用. 3.找到你

jenkins构建触发器详解-不登录触发远程构建详解

利用jenkins的远程构建功能,我们可以使用任何脚本,甚至定制一个Web页来控制Job的执行,但是远程构建你如果直接使用的话,老是需要登录才能执行,如何避免登录?稍微折腾了一下,调通了. 1.点击右上角,你登录的用户名,再点击设置,找到API Token,复制下来你这个用户的Token,用于远程访问Job用. 2.找到你要触发远程构建的Job,把这个复制的Token粘贴进去,点击保存, 也可以自己设置 3.这样你就可以用如下地址来远程触发这个Job执行了,并且不用登录系统就可以触发 curl