通过 CLI 管理 Jenkins Server
Jenkins 内置的命令行接口允许管理员通过命令行工具访问并管理 Jenkins。这让我们可以通过脚本自动化的创建配置或执行任务,也就是把 Jenkins 中的配置代码化了。Jenkins 同时支持通过 SSH 和客户端命令行工具 jenkins-cli.jar 进行访问。本文主要介绍如何通过这两种方式用命令行操作 Jenkins。说明:本文的演示环境为 ubuntu 16.04。
通过 SSH 执行命令
在 Jenkins Server 的默认安装中,内置的 SSH service 是没有启用的:

我们可以通过下面的配置让 Jenkins 启用 SSH service,Jenkins ->Configure Global Security:

笔者选择让 Jenkins 的 SSH Server 监听 8090 端口,如果你选择的是 Random,那么监听的端口是随机产生的,无论如何,我们都可以用下面的命令来获得 Jenkins SSH Server 监听的端口号:
$ curl -Lv http://192.168.21.145:8080/login 2>&1 | grep 'X-SSH-Endpoint'

说明:笔者的 Jenkins Server 部署在主机 192.168.21.145 上,监听的端口号为 8080。用户至少要有 Overall/Read 权限才能访问命令行接口,但是根据执行的命令的不同还需要更高的权限。本文主要演示如何配置远程执行命令,所以演示用的用户具有全部权限。
为用户添加身份验证的秘钥
使用 SSH 的最佳方式是通过秘钥进行身份验证,这里我们把远程机器上用户的公钥添加到 Jenkins 用户 jack 的 Public Keys 列表中(Jenkins -> jack):

现在就可以远程调用 Jenkins Server 提供的命令了,先来问一下 "我是谁?":
$ ssh -l jack -p 8090 192.168.21.145 who-am-i

help 命令
我们可以通过 help 命令来查看所有的可用命令:
$ ssh -l jack -p 192.168.21.145 help

help 命令的输出很长,上图仅截取了一部分,我们还可以通过 help 命令查看其它命令的详细用法,笔者会在后面的文章中详细介绍常用命令,这里先一笔带过。
build 命令
为了演示方便,我们先来简单了解一下 build 命令,它用来触发 job 和 pipeline 的执行。下面的是用它来触发一个名称为 test 的 job,这个 job 非常简单,仅仅输出字符串 "hello":
$ ssh -l jack -p 192.168.21.145 build test -f -v

还不赖,任务被成功的执行了!
到此为止,我们已经可以组织自动化脚本远程操作 Jenkins Server 了。下面我们一起看看 Jenkins 提供的另外一种方式:客户端命令行工具。
客户端命令行工具
虽然基于 SSH 的 CLI 非常便捷,并且能够满足大多数需求,但是在某些情况下,与 Jenkins 一起发布的客户端 CLI 工具可能更合适。例如,客户端 CLI 工具的默认传输方式是 HTTP,这意味着不需要在防火墙中打开额外的端口来就可以使用。
通常不需要进行特殊的系统配置来启用基于 HTTP 的命令行连接。如果是在 HTTP(S) 反向代理后面运行 Jenkins,一定要确保请求和响应不会被缓存。
下载客户端命令行工具
Jenkins 自带的命令行工具是一个 java 程序,可以通过下面的 url 下载到远程主机上:
JENKINS_URL/jnlpJars/jenkins-cli.jar
比如:
$ wget http://192.168.21.145:8080/jnlpJars/jenkins-cli.jar
注意,这是个 java 程序,要运行它需要确保你的主机上安装了 jre。
通过用户名和密码认证用户身份
下面我们用客户端工具来触发 test job,先通过用户名和密码的方式进行认证:
$ java -jar jenkins-cli.jar -s http://192.168.21.145:8080 -auth jack:123456 build test -f -v

虽然命令成功执行了,但使用密码毕竟太不安全。
使用 API Token
安全起见还是应该使用 API Token,先为用户 jack 生成 API Token:

把上面命令中的密码换成 API Token 就可以了:
$ java -jar jenkins-cli.jar -s http://192.168.21.145:8080 -auth jack:11d5ca0f9ee2dac8c47492b3e6b71c82cd build test -f -v
结果和上面是一样的。还可以把用户名和 API Token 保存到文件中,这样能进一步提高安全性:
$ echo jack:11d5ca0f9ee2dac8c47492b3e6b71c82cd > .jenkins-token
然后可以使用 @ 符以下面的方式引用:
$ java -jar jenkins-cli.jar -s http://192.168.21.145:8080 -auth @/home/nick/.jenkins-token build test -f -v
执行的结果也是一样的。注意要在 @ 后面不要用 ~ 号代替用户的家目录。
除此之外还可以通过环境变量来指定用户名和 API Token:
$ export JENKINS_USER_ID=jack
$ export JENKINS_API_TOKEN=11d5ca0f9ee2dac8c47492b3e6b71c82cd
$ java -jar jenkins-cli.jar -s http://192.168.21.145:8080 build test -f -v
效果也是一样的。
通过 SSH 进行连接
好吧,客户端命令行工具也支持通过 SSH 进行连接。同时指定 -ssh 和 -user 选项就可以了:
$ java -jar jenkins-cli.jar -s http://192.168.21.145:8080 -ssh -user jack build test -f -v

总结
通过 Ansible 等工具自动化的创建 Jenkins Server(参考前文《通过 Ansible 创建 Jenkins Server》),然后再通过 Jenkins 提供的 CLI 自动化的操作 Jenkins 中的配置。这样我们就打通了整个 Jenkins Server 的自动化过程(当然,笔者还会介绍如何自动化的创建运行 Jenkins Server 的宿主机)。好吧,这都只是些简单的 demo,在生产环境中要做的事情可要多的多!
参考:
Jenkins CLI
通过 CLI 管理 Jenkins Server的更多相关文章
- 持续集成高级篇之Jenkins cli与Jenkins ssh
系列目录 Jenkins Cli介绍 Jenkins Cli为Jenkins提供的一个cli工具,此工具功能非常强大,可以完成诸如重启jenkins,创建/删除job,查看job控制台输出,添加/删除 ...
- 通过 Ansible 创建 Jenkins Server
创建 CI 流程的第一件事应该是安装 CI 工具,本文以最常见的 Jenkins 为例,介绍如何使用 Ansible 自动安装 Jenkins Server.说明:本文的演示环境为 ubuntu 16 ...
- [译]C#控制管理VisualSVN Server
VisualSVN Server可以用WMI接口管理(Windows Management Instrumentation). VisualSVN Server安装的计算机中,位于%VISUALSVN ...
- C#控制管理VisualSVN Server 分类: C# 2014-05-29 15:51 796人阅读 评论(0) 收藏
VisualSVN Server可以用WMI接口管理(Windows Management Instrumentation). VisualSVN Server安装的计算机中,位于%VISUALSVN ...
- C#控制管理VisualSVN Server
VisualSVN Server可以用WMI接口管理(Windows Management Instrumentation). VisualSVN Server安装的计算机中,位于%VISUALSVN ...
- Gitolite轻松部署/管理git server
对于今天越来越受欢迎的Git,相信做开发的朋友都基本有所耳闻.它最大的便利就是分布式的开发库,让使用git作为源码管理库的开发者可以在本地提交代码的修改而不用提交到远程的库,同时需要和团队协作.同步代 ...
- RabbitMQ CLI 管理工具 rabbitmqadmin(管理和监控)
插个广告,公司最近在招".NET"开发(杭州),如果你现在还从事 .NET 开发(想用 .NET Core,但被公司不认可),想转 JAVA 开发(但又没有工作经验,惧怕面试),想 ...
- Ansible 批量管理Windows Server服务器
Ansible批量管理Windows Server Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具, 它用Python写成,类似于saltstack和Puppe ...
- [ci]jenkins server启动,通过jnlp的方式启动slave(容器模式)
jenkins server启动,通过jnlp的方式启动slave. java -jar jenkins.jar 配置jnlp端口--全局安全 配置云 配置项目 执行成功
随机推荐
- python3 第二十三章 - 函数式编程之Partial function(偏函数)
要注意,这里的偏函数和数学意义上的偏函数不一样,偏函数是2.5版本以后引进来的东西,属于函数式编程的一部分.前面章节中我们讲到,通过设定参数的默认值,可以降低函数调用的难度.而偏函数也可以做到这一点. ...
- eclipse启动时出现无法创建java虚拟机
最 近一直在用eclipse开发android程序,今天不知怎么的启动eclipse时就会出现Failed to create java virtual machine,无法打开eclipse程序,折 ...
- poj1860
刚上来一堆英文着实有点蒙逼,仔细分析是一个Bellman的变形,只要能找出一个无限增大的环这个题就好解决了,我这里用的SPFA,用邻接链表进行储存,直接套用的模板,部分变量名字没有改的很好 #incl ...
- lambda 匿名函数
# 普通python函数 def func(a,b,c): return a+b+c print func(1,2,3) # 返回值为6 # lambda匿名函数 f = lambda a,b,c:a ...
- Django Model 基础
程序涉及到数据库相关操作时,一般都会这样: 创建数据库,设计表结构和字段 使用 pymysql 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 import pymysq ...
- 检索COM类工厂中CLSID为{10020100-E260-11CF-AE68-00AA004A34D5}的组件时失败,原因是出现以下错误:80040154
{"检索 COM 类工厂中 CLSID 为 {10020100-E260-11CF-AE68-00AA004A34D5} 的组件时失败,原因是出现以下错误: 80040154."} ...
- CPU性能分析
CPU性能分析工具 lscpu:查看CPU硬件信息 lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Litt ...
- 在jenkins中调用maven的变量
Maven内置变量说明: ${basedir} 项目根目录(即pom.xml文件所在目录) ${project.build.directory} 构建目录,缺省为target目录 ${project. ...
- 696. Count Binary Substrings
Give a string s, count the number of non-empty (contiguous) substrings that have the same number of ...
- 音视频编解码——YUV视频格式详解
一.YUV 介绍 YUV是一种颜色编码方方式,通常由彩色摄像机进行取像,然后把取得的彩色图像信号经过分色.分别放大校正后得到RGB,再经过矩阵变换得到亮度信号Y和两个色差信号B-Y(即U).R-Y(即 ...