0.jenkins已安装ansible插件,而且jenkins服务器已安装ansible服务。

1.jenkins创建任务

上一篇使用的shell部署的,这篇复制上一篇任务,名字改一下加入ansible方便区分

代码上线之jenkins构建docker版nginxWebUI使用ansible_jenkins

代码上线之jenkins构建docker版nginxWebUI使用ansible_ansible_02

2.Post Steps---Add post-build step---Invoke Ansible Playbook

shell这部分还留着,部署的阶段放到ansible中

代码上线之jenkins构建docker版nginxWebUI使用ansible_ansible_03

代码上线之jenkins构建docker版nginxWebUI使用ansible_ansible_04

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等扩展变量完成后添加

代码上线之jenkins构建docker版nginxWebUI使用ansible_ansible_05

Add Extra Variable 

代码上线之jenkins构建docker版nginxWebUI使用ansible_ansible_06

将General中定义的{tag}变量传到ansible中,key为ans_tag,值为${tag}

代码上线之jenkins构建docker版nginxWebUI使用ansible_jenkins_07

添加凭证   (等于把jenkins后台的私钥搬到jenkins的web界面)

代码上线之jenkins构建docker版nginxWebUI使用ansible_ansible_08

自定义描述

代码上线之jenkins构建docker版nginxWebUI使用ansible_docker_09

添加jenkins服务器root用户的私钥(等于把jenkins后台的私钥搬到jenkins的web界面)

代码上线之jenkins构建docker版nginxWebUI使用ansible_jenkins_10

添加后选中

代码上线之jenkins构建docker版nginxWebUI使用ansible_docker_11

Build with Parameters---控制台输出

代码上线之jenkins构建docker版nginxWebUI使用ansible_ansible_12

代码上线之jenkins构建docker版nginxWebUI使用ansible_docker_13