星期日, 5月 12, 2019

使用 Ansible 建立 容器化 GitLab with openSUSE in Azure 小記

使用 Ansible 建立 容器化 GitLab with openSUSE in Azure 小記

OS: openSUSE Leap 15 in Azure

今天來測試使用 ansible 在 Azure 上面透過容器化的方式建立 GitLab

GitLab 官方建議規格

先來試試看網路上搜尋到的方式
首先試試看沒有掛在 volume 的方式

$docker  run  -d  --hostname  gitlab.example.com  -p  443:443  -p  80:80  --name  gitlab --restart always  gitlab/gitlab-ce:latest

這樣的方式可以將 GitLab 啟動起來, 沒有問題
接下來就要考慮如何將這一系列的動作用 Ansible 串起來了 :)

考量點有
  • 安裝容器服務以及啟動
  • 要有一個獨立磁碟將 container 的設定與資料存起來
    • 掛載起來的時候, 要進行切割分割區以及建立 file system
    • 掛載到指定目錄
  • 下載 gitlab-ce 的 container image 並執行他, 開通 port 80 and port 443
  • 以上的方式要以非互動的方式來進行

寫了一個 playbook 來進行 gitlab 的安裝
  • 使用 gitlab 群組來進行安裝
    • 因為想配合 Azure Dynamic Inventory 方式

檔案 gitlab_install.yml 內容如下

---
# edit by sakana 2019/5/12
#########################################################  
#
#
#########################################################  

- name: Install docker and run service
# use group
 hosts: gitlab
#  sudo: True
 become: True
 vars_prompt:
   - name: "hostname"
     prompt: "Enter gitlab hostname, ex: gitlab.example.com"
     private: no
     default: gitlab.example.com

   - name: "container_name"
     prompt: "Enter container name when we create, ex: gitlab"
     private: no
     default: gitlab

 tasks:
#    - name: test setup moudule
#      setup: filter=ansible_distribution

   - name: Install docker with openSUSE Leap
     zypper:
       name:
         - docker
         - curl
     when: ansible_distribution == "openSUSE Leap"

# 舊的方式 with_item 即將被棄用
#    - name: Install docker with openSUSE Leap
#      zypper: name={{ item }}
#      with_items:
#        - docker
#        - curl
#      when: ansible_distribution == "openSUSE Leap"

#######################################################
# 等到 openSUSE 測試完成再來測試 CentOS and Ubuntu
#
#    - name: Install docker with CentOS
#      yum: name={{ item }}
#      with_items:
#        - docker
#        - curl
#      when: ansible_distribution == "CentOS"

#    - name: Install docker with Ubuntu
#      apt: name={{ item }} update_cache=yes
#      with_items:
#        - docker.io
#        - curl
#      when: ansible_distribution == "Ubuntu"

  
#    - name: Create docker link with Ubuntu
#      shell: ln -sf /usr/bin/docker.io /usr/local/bin/docker
#      when: ansible_distribution == "Ubuntu"
#
######################################################


#-------------------------------------------------------  

   - name: Set docker enable and run
     service: name=docker state=started enabled=yes

#-------------------------------------------------------  

# 使用 parted 建立label
   - name: use parted to make label
     shell: parted /dev/sdc mklabel msdos
# 使用 parted 建立分割區, 要使用百分比的方式才能非互動
   - name: use parted create partition
     shell: parted /dev/sdc mkpart primary 0% 100%
# 建立 file system
   - name: use mkfs.xfs create file system
     shell: mkfs.xfs -f /dev/sdc1
# 使用 mount module 掛載, 寫入 /etc/fstab
   - name: mount /dev/sdc1 to /gitlab
     mount:
       path: /gitlab
       src: /dev/sdc1
       fstype: xfs
       state: mounted

#-------------------------------------------------------  

   - name: use docker command to run
     shell: docker run -d --hostname {{ hostname }} -p 443:443 -p 80:80 --name {{ container_name }} --restart always gitlab/gitlab-ce:latest

#-------------------------------------------------------  


建立方式
如果有使用 azure_rm.py 記得 chmod a+x azure_rm.py

我是使用 Azure Dynamic Inventory 方式

> ansible-playbook -i  azure_rm.py  --ask-pass  --ask-become-pass  -u  使用者名稱   gitlab_install.yml

  • 這個 playbook 目前沒有處理 security group, 暫時先用手動開, 後面視需求看要不要加進去

VM 所加掛的資料磁碟, 非互動方式的處理我是使用 parted 指令

==== parted 一些指令小記 ====

列出 /dev/sdc 上面的分割區
> parted  /dev/sdc  print

建立 label
超過 2TB 以上的
> parted  /dev/sdc mklabel  gpt

一般用
> parted  /dev/sdc mklabel msdos

建立分割區, 使用整顆硬碟
> parted  /dev/sdc  mkpart  primary 0%  100%

刪除第一個分割區
> parted  /dev/sdc rm  1

=======================

建立完機器, 最後的步驟就是
  • 在 Azure portal 上面開啟機器 security group 的 port 80


設定 GitLab root 密碼  -- > Change your password

就有一個 GitLab 實驗環境可以使用啦 :)

~ enjoy it

Reference:

沒有留言: