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

1.jenkins创建任务

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

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

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

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

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

代码上线之jenkins构建docker版nginxWebUI使用ansible_docker_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}}
  • 1.
  • 2.
- 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}}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

主机:hosts

[web]
192.168.77.142
192.168.77.144
  • 1.
  • 2.
  • 3.

添加剧本和hosts文件路径  凭证Credentials等扩展变量完成后添加

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

Add Extra Variable 

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

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

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

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

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

自定义描述

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

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

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

添加后选中

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

Build with Parameters---控制台输出

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

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