利用jenkins进行持续集成测试的第一步就是环境的自动构建,包括代码库检测、自动编译、测试包分发、部署。过程中会涉及到远程到多个服务器操作脚本、命令、服务等,就像大家要出国游玩需要各国的签证才能入境一样,这些都需要输入密码认证才能登录或者进行一些命令、服务等操作时还需要再输入密码才能操作成功。 But,世间万物都是相通滴,有些国家可以免签入境,在计算机的世界里也可以各种“免签(mian mi)”轻松畅游玩耍哦。
下面仅以笔者的一个C++项目测试实践经验总结了一些场景攻略,希望可以让大家在自动化测试王国里各种“免签(mian mi)”自由飞
场景一:jenkins远程执行任务,如何免密登录linux
1 首先在credentials中增加证书,比较简单和常用的是username password方式,其他的方式大家根据具体场景再调整就好
2 在系统设置中增加需要远程登录的服务器
3 设置完后,再构建任务配置中选择之前配置的远程服务器即可远程登录,so easy 对吧
场景二:远程脚本中需要拉取代码仓库代码进行更新,如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的内容即可。
场景三:远程脚本中需要把编译打包好的文件分发到测试服务器时,如何免密进行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的方式,不过那样安全性比较低。
场景四:远程脚本中需要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任务,如何免密构建?
当创建好的任务可以在jenkins系统中正常运行了,为了让更多人的更方便的使用,还可以集成到其他系统中提高易用性,这里就需要用到jenkins提供的api模式,api可以免注册登录,使用令牌后直接调用进行build,获取构建状态、结果等。下面以build为例:
1 先在任务触发器中开启令牌,并设置一个令牌
2 增加匿名用户的build和read权限:安全配置-授权策略-项目矩阵授权策略 ,给匿名用户授权build和read~
3 这样配置完后调用接口还是会报Authentication required错误,继续下一步,在jenkins中安装Build Authorization Token Root Plugin插件
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就好哈
领取专属 10元无门槛券
私享最新 技术干货