1. 源码
1.1 需要准备dockerfile,用于生成jenkins镜像,不同于通用的jenkins镜像,里面需要安装ansible,并安装sshpass,以便直接使用密码登录。另外还需要将ansible的配置文件中的host_key_checking去掉,以免第一次登录主机,需要手动输入yes/no。
FROM daocloud.io/library/jenkins
USER root
RUN apt-get update && apt-get install -y ansible && apt-get install -y sshpass
RUN sed -i 's/#host_key_checking/host_key_checking/g' /etc/ansible/ansible.cfg
USER jenkins
1.2 准备hosts文件,为ansible的配置文件,由于jenkins默认使用jenkins用户ssh,还需要在hosts里面指定root用户。
[ansiblehost]
192.168.123.241 ansible_ssh_user=root ansible_ssh_pass=dangerous
1.3 最终需要执行的测试脚本host_healthy.robot。
2. 创建镜像
使用dockerfile创建jenkins+ansible的镜像,并放入仓库。
3.创建ansible执行机,并安装robotframework插件。
yum install ansible
pip install robotframework
pip install robotframework-selenium2library
4. 使用k8s将生成的镜像拉起
注意需要共享文件系统映射
在host上面创建
mkdir /var/jenkins_home/
chmod 777 /var/jenkins_home/
5. 配置jenkins
安装robot插件
5.1 git项目,拉取git代码
5.2 构建阶段使用execute shell
执行ansible命令。
注意robot的--outputdir参数需要放在执行文件前面。使用这个选项是因为后面publish阶段,需要将结果放到共享文件夹,以便jenkins取用。
ansible ansiblehost -i hosts -m copy -a 'src=dcetest.robot dest=/var/jenkins_home/dcetest.robot'
ansible ansiblehost -i hosts -m file -a 'path=/var/jenkins_home/result state=directory'
ansible ansiblehost -i hosts -m shell -a 'robot --outputdir /var/jenkins_home/result /var/jenkins_home/dcetest.robot'
ansible localhost -m file -a 'path=/var/jenkins_home/result state=directory'
ansible ansiblehost -i hosts -m fetch -a 'src=/var/jenkins_home/result/output.xml dest=/var/jenkins_home/workspace/robot flat=yes'
ansible ansiblehost -i hosts -m fetch -a 'src=/var/jenkins_home/result/report.html dest=/var/jenkins_home/workspace/robot flat=yes'
ansible ansiblehost -i hosts -m fetch -a 'src=/var/jenkins_home/result/log.html dest=/var/jenkins_home/workspace/robot flat=yes'
拷贝git下载的执行脚本到ansible执行机
给ansible执行机创建结果保存的目录
执行测试脚本,注意结果保存
在jenkins本机创建结果保存文件夹
将ansible执行机的执行结果去到jenkins本机的结果保存目录
5.3 构建后的操作选择publish robot
最好结果文件的目录使用默认目录,即不填,指定目录好像没法看到report.html和log.html,提示找不到文件。
另外jenkins需要设置js。
1 打开jenkins 首页
2 进入系统管理
3 进入脚本命令行
在输入框输入如下代码,并执行
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","")