持续集成高级篇之Jenkins cli与Jenkins ssh

系列目录html

Jenkins Cli介绍

Jenkins Cli为Jenkins提供的一个cli工具,此工具功能很是强大,能够完成诸如重启jenkins,建立/删除job,查看job控制台输出,添加/删除节点等功能.可是实际工做中,像建立任务这样的配置显然cli很是吃力,不如直接在web管理界面操做,可是对于重启Jenkins,查看诊断信息等,执行一个手动构建任务等,则直接使用cli比进入web管理界面操做更加方便.所以何时web管理界面,何时使用cli,要看是否有利于提高生产力,是否有利于提高我的能力,是否有利于提高团队的自动化做业水平这些指标,不要觉得使用cli就表明水平高而盲目使用cli从而致使效率降低或者问题增多.java

jenkins cli能够经过jenkins提供的jar包来建立一个cli环境或者使用ssh客户端来执行cli,本节也会分别介绍它们.git

使用jenkins自身客户端来执行cli

咱们打开jenkins的安装目录,进入到war\WEB-INF目录,此目录下面有一个jenkins-cli.jar文件,它即是用来建立jenkins cli环境的.咱们在这个目录下打开命令行工具,而后执行java -jar jenkins-cli.jar help即可以看到它的输出帮助信息web

img

能够看到-s选项能够指定一个url,这个url就是jenkins web管理界面的url,如今是测试环境,url为http://localhost:8080,固然想要执行cli,还须要输入你的用户名和密码,这里经过 -auth选项指定用户名密码.shell

咱们把上以信息综合起来,组成如下命令windows

java -jar jenkins-cli.jar -s http://localhost:8080 -auth tylerzhou:密码 help

以上语句中,help为要执行的命令.api

须要注意的是,这里执行的命令直接是命令名称,不能加像其它命令行工具- -- 或/标识浏览器

若是你找不到Jenkins-cli.jar,能够经过在浏览器输入http://localhost:8080/jnlpJars/jenkins-cli.jar进行下载保存,注意把以上地址替换为您的实际地址安全

点击回车,能够看到全部Jenkins cli可执行的命令和命令的简短描述.下面介绍几个可能比较经常使用的命令dom

1) list-jobs,能够列出Jenkins里全部的job,就像打开jenkins web管理界面首页看到的那样.

命令以下

java -jar jenkins-cli.jar -s http://localhost:8080 -auth 您的帐户:您的密码 list-jobs

须要注意的是,Jenkins cli须要每次执行命令的时候都带上java -jar jenkins-cli.jar -s http://localhost:8080 -auth 您的帐户:您的密码+要执行的命令,而不是进入一个环境后只输入命令就好了.

2) build+要构建的job名,便可经过cli来触发一次构建.

构建成功后,咱们打开web管理界面即可以看到多一次构建.

cli构建命令是一个很是实用的命令,虽然咱们的大部分任务都是基于git的一个自动化流程.可是有些时候也须要手动执行一些脚原本完成工做中的一些自动化操做.若是每次打开web管理界面手动执行显然不如经过cli来执行效率高.

3) restart/safe-restart 能够重启jenkins服务,经过它们的名称能够看到safe-restart为安全重启,它会等到全部的操做都完成而后执行重启

4) clear-queue 清除构建队列.没有实际jenkins使用经验的朋友可能不知道,因为Jenkins自身缘由或者咱们脚本测试不够充分致使的bug,有时候会形成Jenkins构建阻塞,一直处于构建状态没法完成,这时候经过web管理界面点击取消构建也没法取消掉.此时呆以尝试这个命令.固然也可能仍然没法终止,此时须要使用restart命令暴力重启服务.

使用api token登录

以上咱们都是经过用户名:密码的方式来登录cli,这样把明文密码暴露出来是不可取的,其实Jenkins cli还能够经过用户名:apitoken的方式来实现登录cli.下面咱们介绍五如何设置api token.

咱们打开jenkins web管理界面,点击左侧的People按钮,在出现的界面中会列出可能不止一个用户,此时点击自身登录jenkins的用户名,在进入的界面中点击configure按钮,在出现的界面中找到Api token

img

点击Add new token便会出现一个生成token的小界面,输入token的名称,能够是任意名称,而后点击generate,这时候就会生成一个token

img

注意必定要把这个token复制下来而后保存到其它地方,下次再找开的时候就看不到它了.

完成后点击保存.

此时咱们在cli中输入如下命令

java -jar jenkins-cli.jar -s http://localhost:8080 -auth tylerzhou:11f52cef1324556a41d966083ffcf0ac1b

其中tylerhzou为用户名,后面就是咱们刚才建立的token

若是执行成功,以上命令就输出jenkins cli的全部命令.

把命令信息保存到单独文件

咱们能够看到,使用token的方式登录会致使命令行很是长,严重影响命令可读性,其实咱们能够把auth信息保存到一个文件文件里.我在Jenkins安装目录/war/WEB-INF目录下建立了一个名为password.txt的文本文件,内容以下

tylerzhou:11f52cef1324556a41d966083ffcf0ac1b

也即上面auth里输入的用户名:apitoken

这时咱们在-auth选项里 经过指定@文件名方式指定包含用户名(密码或token)的文件来实现登录.

代码以下

java -jar jenkins-cli.jar -s http://localhost:8080 -auth @password.txt

以上@后面的password.txt即为咱们建立的密码文件

SSH方式登录Jenkins执行cli

使用SSH方式登录Jenkins须要进行配置,默认状况下jenkins SSHD port使用的是一个随机端口号,这样显然不利于ssh登录,使用ssh登录咱们须要显式知道端口号是多少.咱们打开Manage jenkins>Configure Global Security找到SSH Server栏,把默认random选项切为fixed而后输入一个同用端口号,我使用的是16022配置完成后点击保存.端口配置好了,咱们还须要添加公钥到当前用户配置项,请参照上面使用api token登录一节,进入到当前用户设置界面,此次咱们不配置apitoken,而是往下拉找到SSH Public Keys选项,把咱们生成的ssh公钥复制到这里.关于生成ssh key请参阅其它资料或者前面章节,这里再也不赘述.

完成之后,咱们就能够经过ssh方式执行命令了.

输入如下命令

ssh -l tylerzhou -p 16022 localhost help

其中-l指定的用户为咱们登录jenkins时的帐户.
若是配置成功,以上命令就会列出全部的Jenkins 命令和简短介绍.

ssh执行的命令和上面经过jenkins-cli.jar执行的命令是同样,能够互相参照.

对jenkins cli进行简单封装

使用bat简单封装

能够看到,以上执行cli不管是经过工具仍是ssh,每次都须要带上一些固定的登录信息,很是烦,咱们能够进行一下简单的封装,这样每次只须要输入命令,再也不须要每次重复输入固定内容

咱们把它封装成个bat命令,命令以下

@echo off
cls
:start
set /p arg="请输入您的命令: "
java -jar jenkins-cli.jar -s http://localhost:8080 -auth @password.txt %arg%
goto start

以上命令产首先建立一个start标签,而后提示用户输入命令,输入之后传到的jenkins cli工具里,而后执行goto语句跳到start标签.以上命令会重复执行,想要终止须要按下ctrl+c来终止

使用powershell脚本进行封装

因为笔者对bat不是很熟练,所以写起复杂脚本感受比较费劲,这里使用powershell进行一下封装,支持清屏,查看执行状态和退出选项,脚本内容以下

[System.Console]::ForegroundColor=[System.ConsoleColor]::Green
 $writeout= 
  "  退出请按1或者输入exit
  清屏请按2或者输入cls或者clear
  查看执行状态请按3
  查看帮助请输入help
  查看提示信息请按4"
  Write-Host $writeout
[System.Console]::ForegroundColor=[System.ConsoleColor]::White

while ($true) {
$myvar=Read-Host "请输入命令 "
if(($myvar -eq 1)-or($myvar -eq "exit")){break}
elseif (($myval -eq 2) -or ($myvar -eq "cls") -or($myvar -eq "clear")) {
    Clear-Host
}
elseif ($myvar -eq 3) {
    if($LASTEXITCODE -eq 0){
      Write-Host "执行成功"
    }else{
        [System.Console]::ForegroundColor=[System.ConsoleColor]::Red
        Write-Host "执行失败"
        [System.Console]::ForegroundColor=[System.ConsoleColor]::White
    }
}
elseif($myvar -eq 4){
[System.Console]::ForegroundColor=[System.ConsoleColor]::Green
Write-Host $writeout
[System.Console]::ForegroundColor=[System.ConsoleColor]::White
}
else {
   java -jar jenkins-cli.jar -s http://localhost:8080 -ssh -user tylerzhou $myvar.split(" ")
}
}

你们建立一个ps1文件,把以上内容复制进去而后按提示操做,即可以执行脚本了.

windows 没有ssh客户端的问题

有些童鞋在跟着作上面的ssh方式登录时,可能在命令行输入ssh会提示找不到命令,这是由于只有最新版本的windows 10(不是全部的版本都有).幸运的是,Jenkins-cli.jar也提供了ssh登录方式.咱们输入如下命令

java -jar jenkins-cli.jar -s http://localhost:8080 -ssh -user tylerzhou help

经过以上方式指定ssh方式登录,并指定-user,不须要指定端口,即可以使用ssh方式链接了.咱们可使用上面讲到的封闭方法简单的封闭一下,这样就不用每次都输入重复的,固定的内容了.

相关文章
相关标签/搜索