0.jenkins已安装ansible插件,而且jenkins服务器已安装ansible服务。
1.jenkins创建任务
上一篇使用的shell部署的,这篇复制上一篇任务,名字改一下加入ansible方便区分
2.Post Steps---Add post-build step---Invoke Ansible Playbook
shell这部分还留着,部署的阶段放到ansible中
3.填写在jenkins上服务器上编写的剧本和hosts文件路劲,剧本和hosts在jenkins服务器上/devops/script目录下
剧本:nginxwebui.yml
注:剧本中{{ans_tag}}需要General中定义参数化构建的{tag}传到这里,引用的话是{{tag_name}}
{tag}---{{ans_tag}}---{{tag_name}}
- hosts: web
vars:
- tag_name: "{{ans_tag}}"
gather_facts: false
tasks:
- name: 检查端口是否有冲突
shell: docker ps -a | grep -w '8888-'
register: port
#无论shell执行后有没有端口,都不能判断出错,当返回结果出现not found才算出错,否者下一步
failed_when: '"not found" in port.stdout'
- name: 若端口冲突删除容器
shell: docker ps -a | grep -w '8888-' | awk '{print $NF}'| xargs docker rm -f
#当port的返回结果是0,即查询端口的shell行后,echo $?为0,那么证明存在8888端口,就执行删除容器的shell
when: port.rc == 0
- name: 检查容器是否已存在
shell: docker ps -a | grep -w "nginxwebui"
register: container_name
#无论shell执行后有没有同名容器,都不能判断出错,当返回结果出现not found才算出错,否者下一步
failed_when: '"not found" in container_name.stdout'
- name: 若容器已存在删除容容器
shell: docker ps -a | grep -w "nginxwebui" | awk '{print $NF}'| xargs docker rm -f
#当container_name的返回结果是0,即查询端口的shell行后,echo $?为0,那么证明存在同名容器存在,就执行删除容器的shell
when: container_name == 0
- name: 启动容器
shell: docker run -itd --name nginxwebui -v /home/nginxWebUI:/home/nginxWebUI -p 8888:8080 --restart=always alibaby007.com/nginxwebui/nginxwebui:{{tag_name}}
主机:hosts
[web]
192.168.77.142
192.168.77.144
添加剧本和hosts文件路径 凭证Credentials等扩展变量完成后添加
Add Extra Variable
将General中定义的{tag}变量传到ansible中,key为ans_tag,值为${tag}
添加凭证 (等于把jenkins后台的私钥搬到jenkins的web界面)
自定义描述
添加jenkins服务器root用户的私钥(等于把jenkins后台的私钥搬到jenkins的web界面)
添加后选中
Build with Parameters---控制台输出