iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 14
2
DevOps

30 天入門 Ansible 及 Jenkins [2018]系列 第 14

[Day 14] 實戰 Ansible (下)

  • 分享至 

  • xImage
  •  

roles/docker-jenkins - Template

安裝好 Docker 以後,最後終於來到 docker-jenkins 這個 role 了。在 tasks/main.yml 的一開始,我使用了 include 來調用了 tasks/setup.yml 進行一些前置作業。這種做法可以有效讓我們將任務清單根據用途做一個簡單的區分,並只將主要輪廓定義在 main.yml 內,這樣一來增加易讀性,二來也可以減少未來在維護上的難度。

註:雖然 include 描述句在 Ansible 2.4 版後已經被官方棄用 (deprecate),但現階段還是可以使用。然而,筆者仍然建議讀者儘速將 include 使用 import_tasks 以及 include_tasks 做替換。更多細節可以參考這份官方文件

在 setup.yml 中,先依序建立了 docker-jenkins 的工作目錄,並將 files/plugin.txt 複製到該目錄下。這個 plugin 清單是 Jenkins 在初始安裝過程中需要被安裝的列表,在等等的安裝過程會被使用到。接著,我們透過了 Ansible 的 template 來將 security.groovy 以及 Dockerfile 這兩個檔案複製到 managed node 上。

  1. security.groovy.j2

    這個檔案的主要功能是讓我們在使用 Ansible 部署 Jenkins 的時候可以直接初始化一個系統管理者,而不用中斷部署流程來手動進行使用者設定。還記得我們在運行 playbook 時傳遞的 jenkins_admin_user 以及 jenkins_admin_pass 這兩個變數嗎?透過 template 的模組,我們就可以將之前定義的變數套用到這個初始化腳本。這樣一來,我們就可以這個 role 分享給開發團隊成員,而不用擔心系統管理者的資料不小心洩漏出去。

  2. Dockerfile.j2

    這個檔案定義了 Docker 要如何建立我們的容器映像檔 (image),某種程度上與 Vagrantfile 蠻類似的。在這裡我還利用了 Jinja2 的條件語句來判斷變數是否有定義。

接著,將所需檔案都準備好之後,接著回到 docker-jenkins,使用 docker-image 以及 docker_container 這兩個在 Ansible 2.1 後釋出的模組來直接操作 Docker image 的建立與運行容器。

最後,因為當 Jenkins 在安裝完成後,會需要約 10 至 30 秒的時間來作啟動,所以我們希望透過下面這個任務:

- name: Wait for jenkins to come up
  uri:
    url: "{{jenkins_url}}"
  register: jenkins_url_result
  until: jenkins_url_result.status == 200
  retries: 5
  delay: 10

來確保若還有接下來的部署任務,在進入下一個任務前 Jenkins 已經正確運行,進而避免當需要直接操作 Jenkins 時產生沒有回應的問題。

總結

總結一下我們安裝 Jenkins 的流程:

  1. 使用 git-clone 下載專案並切換至專案目錄:
$ git clone git@github.com:tsoliangwu0130/my-ansible.git
$ cd my-ansible
  1. 使用 Vagrant 啟動虛擬機
$ vagrant up
  1. 修改並運行 playbook 進行部署:
$ ansible-playbook docker-jenkins.yml
  1. 等到部署流程完成後,在瀏覽器上訪問 http://localhost:8080/,並確認可以使用設定的系統使用者帳號密碼登入 Jenkins。

只要四個步驟!我們只用了四條指令就簡單利用 Ansible 將 Jenkins 安裝至 managed node 啦!希望讀者有透過這個例子感受到 Ansible 的強大!接下來,我們就可以正式進入 Jenkins 的章節囉!


上一篇
[Day 13] 實戰 Ansible (中)
下一篇
[Day 15] Jenkins 介紹
系列文
30 天入門 Ansible 及 Jenkins [2018]30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
mattchen4523
iT邦新手 5 級 ‧ 2018-11-12 16:39:15

接著,將所需檔案都準備好之後,接著回到 docker-jenkins,使用 docker-image 以及 docker_container 這兩個在 Ansible 2.1 後釋出的模組來直接操作 Docker image 的建立與運行容器。

請問這邊的應該要準備file,我出了好多錯啊。那{{docker_jenkins_home}} 要在哪裡設定呢?

我要留言

立即登入留言