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

系列目录

Jenkins Cli介绍

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

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

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

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

可以看到-s选项可以指定一个url,这个url就是jenkins web管理界面的url,现在是测试环境,url为http://localhost:8080,当然想要执行cli,还需要输入你的用户名和密码,这里通过 -auth选项指定用户名密码.

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

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

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

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

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

点击回车,可以看到所有Jenkins cli可执行的命令和命令的简短描述.下面介绍几个可能比较常用的命令

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

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

注意一定要把这个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方式连接了.我们可以使用上面讲到的封闭方法简单的封闭一下,这样就不用每次都输入重复的,固定的内容了.

原文地址:https://www.cnblogs.com/tylerzhou/p/11450853.html

时间: 2024-11-05 12:08:22

持续集成高级篇之Jenkins cli与Jenkins ssh的相关文章

持续集成高级篇之基于win32-openssh搭建jenkins混合集群(一)

系列目录 前面的demo我们使用的都是只有一个windows主节点的的jenkins,实际生产环境中,一个节点往往是不能满足需求的.比如,.net项目要使用windows节点构建,java项目如果部署在linux服务器上往往也需要目标类型的linux节点做为构建节点,开发中使用的jdk版本不同也可能需要不同的构建主机.构建docker镜像往往也需要linux主机(强烈不建议使用docker for windows 进行linux环境的docker构建).本节我们讲解如何搭建一个主节点为windo

持续集成高级篇之Jenkins Pipeline 集成sonarqube

系列目录 前面章节中我们讲到了Sonarqube的使用,其实Sonarqube获取msbuild结果主要是执行三个命令,开始标记,执行msbuild,结束标记,这些都是命令,是非常容易集成到我们ci流程中的,但是使用这种方式最为简单,但是Sonarqube插件与jenkins集成的更好,我们可以通过jenkins页面看到构建结果是否成功,以及可以通过链接轻松地跳到Sonarqube web管理界面.前面章节我们介绍了如何在自由式任务中使用sonarqube插件,这里我们讲下如何在pipeline

持续集成高级篇之Jenkins Pipeline git拉取

系列目录 PipeLine中拉取远程git仓库 前面讲自由式任务的时候,我们可以看到通过自由式job里提供的图形界面配置git拉取非常方便的,实际上使用PipeLine也并不复杂.这一节我们展示一下如何在PipeLine任务中拉取git仓库代码. node{ stage("check out"){ git credentialsId: '3c210def-c000-4e2a-9b2d-838986a6b172', url: 'https://github.com/mrtylerzhou

持续集成高级篇之Jekins参数化构建(二)

系列目录 上一节我们讲解了如何使用bat脚本或者powershell脚本自身的机制来达到参数化构建的目的,这在一定程序上增加了灵活性,然而缺点也相当明显:它只能适应一些相对比较固定的参数传入(比如像上一节讲到的,构建的环境分为(development和production)两种情况,对于一些相对较复杂的情况以上方法就会捉襟见肘,最为明显问题是外部的变化可能导致参数随之做必要更改,最常见的是文件的位置参数,我们指定归档文件的目录为D盘下的一个文件夹,现在D盘满了需要指定为其它盘,则所有的脚本都需要

持续集成高级篇之Jekins参数传入与常见任务

系列目录 有的童鞋可能已经发现,PipeLine项目与自由式项目相比,可配置的项少了很多,比如说环境变量定义,所有步骤完成后执行动作,拉git代码库等.其实这些功能并没有缺,而是配置的方式不一样了,以前是通过图形化界面配置,虽然直观简便,但是功能不能包罗万像,对于一些复杂的项目显得捉襟见肘,而Jenkins PipeLine使用代码配置功能更加强大.以后的章节中我们会介绍常用的配置如何通过PipeLine里的Groovy脚本来实现. 前面讲参数化构建的时候已经讲到对于复杂的构建把一些重复的,常用

持续集成+自动化部署[代码流水线管理及Jenkins和gitlab集成]

持续集成+自动化部署[代码流水线管理及Jenkins和gitlab集成] 标签(空格分隔): Jenkins 一.代码流水线管理 Pipeline名词顾名思义就是流水线的意思,因为公司可能会有很多项目.如果使用jenkins构建完成后,开发构建项目需要一项一项点击,比较麻烦.所以出现pipeline名词. 代码质量检查完毕之后,我们需要将代码部署到测试环境上去,进行自动化测试 新建部署代码项目 点击新建 这里只需要写一下描述 执行Shell脚本 温馨提示:执行命令主要涉及的是权限问题,我们要搞明

IOS使用jenkins进行持续集成 第二篇

上一篇,自己尝试进行持续集成,研究的不深入,这两天,为公司搭建持续集成环境,以及内部发布系统,了解的更多了,所以分享出来. 这篇主要介绍一些其他东西,不重复介绍上一篇的内容. 如果使用jenkins进行ios持续集成,需要xcode插件支持,所以先下载xcode插件,而且后期还要用到ftp服务,也安装ftp的插件. jenkins中可以自己创建特定的视图分组,all视图点击+号就能创建新视图,创建好后,在左侧的编辑视图选项,则会进入详情页,可以选择放入此视图的任务:相对于任务,我觉得最好依据代码

IOS使用jenkins进行持续集成 第一篇

本文主要讲述在开发过程中,提高工作效率而进行的IOS-Jenkins的持续集成. 背景 平时我们开发完成IOS项目,需要打包给测试人员进行测试.其中的过程需要重复进行:修改配置项--编译---连接设备--运行打包--debug进设备中--然后交给等待的测试人员.现有成熟的持续集成Jenkins解决方案,并且该方案也提供了Xcode插件的支持,可以讲上述过程封装成一键解决方案. 我实现的是jenkins执行IOS的job,build工程,签名打ipa包,上传到FTP服务器,放到tomcat下,提供

Docker+Jenkins持续集成环境(2)使用docker+jenkins构建nodejs前端项目

前文使用Docker搭建Jenkins+Docker持续集成环境我们已经搭建了基于docker+jenkins的持续集成环境,并构建了基于maven的项目.这一节,我们继续扩展功能,增加对Nodejs的支持,实现nodejs项目构建.并打包成docker镜像和自动部署. 1. 配置Nodejs环境 1.1 安装nodejs插件 打开系统管理——管理插件——可选插件,搜索NodeJS,选择NodeJS Plugin安装 1.2 配置nodejs 版本 系统管理 —— 全局工具配置 —— NodeJ