带你在jenkins持续集成中各种“免(mian)签(mi)”自由飞

Posted Qtest之道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带你在jenkins持续集成中各种“免(mian)签(mi)”自由飞相关的知识,希望对你有一定的参考价值。

利用jenkins进行持续集成测试的第一步就是环境的自动构建,包括代码库检测、自动编译、测试包分发、部署。过程中会涉及到远程到多个服务器操作脚本、命令、服务等,就像大家要出国游玩需要各国的签证才能入境一样,这些都需要输入密码认证才能登录或者进行一些命令、服务等操作时还需要再输入密码才能操作成功。 But,世间万物都是相通滴,有些国家可以免签入境,在计算机的世界里也可以各种“免签(mian mi)”轻松畅游玩耍哦。

下面仅以笔者的一个C++项目测试实践经验总结了一些场景攻略,希望可以让大家在自动化测试王国里各种“免签(mian mi)”自由飞    

带你在jenkins持续集成中各种“免(mian)签(mi)”自由飞

带你在jenkins持续集成中各种“免(mian)签(mi)”自由飞
场景一:jenkins远程执行任务,如何免密登录linux

1 首先在credentials中增加证书,比较简单和常用的是username password方式,其他的方式大家根据具体场景再调整就好


带你在jenkins持续集成中各种“免(mian)签(mi)”自由飞


2 在系统设置中增加需要远程登录的服务器


带你在jenkins持续集成中各种“免(mian)签(mi)”自由飞


3 设置完后,再构建任务配置中选择之前配置的远程服务器即可远程登录,so easy 对吧


带你在jenkins持续集成中各种“免(mian)签(mi)”自由飞

带你在jenkins持续集成中各种“免(mian)签(mi)”自由飞
场景二:远程脚本中需要拉取代码仓库代码进行更新,如git代码仓库,如何免密进行git pull  ?

推荐使用ssh 的rsa key方式。

1 先在需要免密的服务器上执行:ssh-keygen -t rsa 最简单过程是一路回车(当然也可以设置一下文件生成的位置和使用密钥的密码)

生成的2个id_rsa(私钥)、 id_rsa.pub(公钥)文件默认在home的.ssh目录下

2 在git中增加ssh keys: 进入设置-ssh keys-新建一个key,把公钥中的内容 copy为新key的内容即可。


带你在jenkins持续集成中各种“免(mian)签(mi)”自由飞

场景三:远程脚本中需要把编译打包好的文件分发到测试服务器时,如何免密进行scp ?


还是推荐使用ssh 的rsa key方式。

1 生成ssh rsa key方法同上

2 把publick key scp到目标服务器的.ssh/authorized_keys文件中,这里有几点注意:

(1)如果用的某一个组,可能authorized_keys中已经有别人设置过的公钥了,把自己的追加上去即可。

(2)如果没有ssh目录和文件 ,则自己新建,注意.ssh目录权限要调整为700,authorized_keys文件权限要调整为600或644. 这里遇到一个坑就是,自己新建authorized_keys文件时,默认权限是664,导致免密失败。因为本身是安全认证,所以SSH公钥认证必须设置合适的权限,so这里可以体会一下linux文件目录权限不是越大越好哦

3 上述配置完后,去jenkins构建任务还是会scp失败,因为第1次scp还会询问你加入known hosts,需要手动输入yes或no。

我这里的修复方案为在服务器上手动执行一下scp即可,google发现也有修改服务器配置不需要加入known hosts的方式,不过那样安全性比较低。


带你在jenkins持续集成中各种“免(mian)签(mi)”自由飞

场景四:远程脚本中需要sudo 来执行一些命令或服务时,如何免密执行sudo ?


1 在jenkins脚本中执行sudo命令,会出现“sudo: no tty present and no askpass program specified”的错误。

修复方案为:在Jenkins 的master机器上修改sudo文件,在文件的末尾加上一行 jenkins ALL=(ALL) NOPASSWD: ALL,保存,重启Jenkins服务即可~

2 解决完上面的问题,继续在需要远程免密sudo的目标服务器上配置:

先以 root 身份登录,执行visudo 

(1)找到这一行 yourname ALL=(ALL)  ALL改为yourname ALL=(ALL) NOPASSWD:ALL

(2)如果你属于某一个组,还得把相应的组 %groupname ALL=(ALL)  ALL,改为%groupname ALL=(ALL) NOPASSWD:ALL

(3)如果要远程使用sudo不输入密码,还需要找到Defaults    requiretty  这一行。修改为Defaults:yourusername    !requiretty

保存后无需重启机器即可生效。


带你在jenkins持续集成中各种“免(mian)签(mi)”自由飞

场景五:远程构建jenkins任务,如何免密构建?


当创建好的任务可以在jenkins系统中正常运行了,为了让更多人的更方便的使用,还可以集成到其他系统中提高易用性,这里就需要用到jenkins提供的api模式,api可以免注册登录,使用令牌后直接调用进行build,获取构建状态、结果等。下面以build为例:

1 先在任务触发器中开启令牌,并设置一个令牌


带你在jenkins持续集成中各种“免(mian)签(mi)”自由飞


2 增加匿名用户的build和read权限:安全配置-授权策略-项目矩阵授权策略 ,给匿名用户授权build和read~ 


带你在jenkins持续集成中各种“免(mian)签(mi)”自由飞


3 这样配置完后调用接口还是会报Authentication required错误,继续下一步,在jenkins中安装Build Authorization Token Root Plugin插件


带你在jenkins持续集成中各种“免(mian)签(mi)”自由飞

4 Goolgle发现top几的文章大多说是http://xxxx/jenkins/buildByToken/build ?token=test&arg=xx&job=xx,这样调用,但是我用会报404,

查看官方文档发现应该用buildWithParameters 方法,应该是插件版本原因,如下调用是ok的。http://xxxx/jenkins/buildByToken/buildWithParameters?token=test&arg=xx&job=xx

Ps:以上更多的是个人项目经验总结的操作手册,其中涉及到的linux命令和其他技术原理受篇幅所限就不在这里展开阐述了,大家自己google就好哈


陪伴是最长情的告白

每日为你推送最暖心的晚安故事


以上是关于带你在jenkins持续集成中各种“免(mian)签(mi)”自由飞的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins 训练营 | 带你玩转 Pipeline

手把手教你在Linux下搭建Jenkins实现自动部署

专题你不容错过的持续集成工具—Jenkins

Jenkins持续集成工具安装

利用 Jenkins 持续集成 iOS 项目,搭建自动化打包环境

Jenkins+Maven+Gitlab+Nexus持续集成环境搭建