星期日, 2月 21, 2021

openSUSE Leap 15.2 以非互動方式註冊 GitLab runner with docker executor in Azure 小記

openSUSE Leap 15.2 以非互動方式註冊 GitLab runner with docker executor in Azure 小記


OS: openSUSE Leap 15.2 in Azure

GitLab: 使用 gitlab.com


上次的文章使用互動的方式註冊 gitlab-runner 然後是用 shell executor


今天要來實作以非互動的方式註冊 gitlab-runner 然後採取 docker 來當 executor


實作前提

  • 在 gitlab.com 有帳號 ( 免費的就可以, 有付錢的功能更多  )


確認自己的 GitLab project / Group CI / CD Runner 設定與 Token 

  • 在 GitLab.com 登入自己帳號

  • 在 Project / Group 內 的 Settings -- > CI / CD

  • 展開 Runners 就會看到 Token




接下來開始建立實驗


建立 openSUSE Leap 15.2 in Azure

  • 我是用  Cloud Shell in VS code 然後透過 ansible 建立



使用 zypper 新增 gitlab 的 repo

  • 語法  zypper ar -f <URL> <alias>


# zypper  ar  -f  https://download.opensuse.org/repositories/openSUSE:/infrastructure:/gitlab/openSUSE_Leap_15.2  gitlab


觀察相關資訊

# zypper  lr


Repository priorities are without effect. All enabled repositories share the same priority.


# | Alias               | Name                        | Enabled | GPG Check | Refresh

--+---------------------+-----------------------------+---------+-----------+--------

1 | gitlab              | gitlab                      | Yes     | ( p) Yes  | Yes

2 | repo-debug          | Debug Repository            | Yes     | ( p) Yes  | Yes

3 | repo-debug-update   | Update Repository (Debug)   | Yes     | ( p) Yes  | Yes

4 | repo-non-oss        | Non-OSS Repository          | Yes     | ( p) Yes  | Yes

5 | repo-oss            | Main Repository             | Yes     | ( p) Yes  | Yes

6 | repo-source         | Source Repository           | Yes     | ( p) Yes  | Yes

7 | repo-update         | Main Update Repository      | Yes     | ( p) Yes  | Yes

8 | repo-update-non-oss | Update Repository (Non-Oss) | Yes     | ( p) Yes  | Yes


匯入  GPG Key 與 refresh repo

# zypper  --gpg-auto-import-keys  refresh


安裝 gitlab-runner

# zypper   install  -y  gitlab-runner


啟動 docker 服務

# systemctl  start  docker


設定 docker 開機時啟動

# systemctl  enable  docker


使用 gitlab-runner register 搭配 --non-interactive 方式非互動註冊

# gitlab-runner  register --non-interactive  --url  https://gitlab.com  --registration-token YOUR_TOKEN    --executor  docker --docker-image  opensuse/leap:latest  --name  test-gitlab-runner-docker   --tag-list  "opensuse-docker"


  • --url 與 --registration-token 請換成自己要註冊的 Server 與 token

  • --executor 指定 docker 方式 並指定預設的 docker image 爲 opensuse/leap:latest

  • --name 指定名稱

  • --tag-list 指定 tag


觀察相關資訊

# cat   /etc/gitlab-runner/config.toml


concurrent = 1

check_interval = 0


[session_server]

  session_timeout = 1800


[[runners]]

  name = "test-gitlab-runner-docker"

  url = "https://gitlab.com"

  token = "5kYxjqvGPPy63Vus_W66K"

  executor = "docker"

  [runners.custom_build_dir]

  [runners.cache]

    [runners.cache.s3]

    [runners.cache.gcs]

  [runners.docker]

    tls_verify = false

    image = "opensuse/leap:latest"

    privileged = false

    disable_entrypoint_overwrite = false

    oom_kill_disable = false

    disable_cache = false

    volumes = ["/cache"]

    pull_policy = "always"

    shm_size = 0


  • 這邊的 token 是 runner 的 token


啟動 gitlab-runner

# gitlab-runner  start


觀察相關資訊

# gitlab-runner  status


也可以到 Gitlab 上面觀察



又前進一步

下次預計來弄 ansible playbook :)


~ enjoy it


Reference:



星期一, 2月 08, 2021

openSUSE Leap 15.2 as GitLab runner in Azure 小記

openSUSE Leap 15.2 as GitLab runner in Azure 小記


OS: openSUSE Leap 15.2 in Azure

GitLab: 使用 gitlab.com


最近開始學 GitLab

先感謝 陳正瑋 的鐵人賽文章以及 和艦長一起30天玩轉 GitLab 書籍

入門多了很多的資訊


今天要來寫的是把 openSUSE Leap 15.2 當成 gitlab runner 來執行

爲何要寫這篇呢? 當然是因為官方的文件上沒有列出 openSUSE 安裝方式 :)


那就只好自己嘗試, 然後記錄下來了 (攤手)


實作前提

  • 在 gitlab.com 有帳號 ( 免費的就可以, 有付錢的功能更多  )


確認自己的 GitLab project / Group CI / CD Runner 設定與 Token 

  • 在 GitLab.com 登入自己帳號

  • 在 Project / Group 內 的 Settings -- > CI / CD

  • 展開 Runners 就會看到 Token




接下來開始建立實驗


建立 openSUSE Leap 15.2 in Azure

  • 我是用  Cloud Shell in VS code 然後透過 ansible 建立的 ~ 開心



回到 gitlab 身上來

如果在 software.opensuse.org 上面搜尋 gitlab-runner



  • 這邊其實就有看到實驗性套件了


使用 ssh 連入剛剛的 openSUSE Leap 15.2 in Azure


使用 yast  repositories 新增套件庫


#yast  repositories


新增套件庫 (Alt + A)

方式選取 指定 URL



點選下一步 (Alt + N)

套件庫的名稱可以自行取

URL 的部分指定 



點選下一步 (Alt + N)

有遇到 GnuPG Key 可以 Trust 一下



確認 GitLab 套件庫有被加入

點選 OK (Alt + O)



接下來新增相關套件


# zypper   install  gitlab-runner


Loading repository data...

Reading installed packages...

Resolving package dependencies...


The following 5 NEW packages are going to be installed:

  dash gitlab-common gitlab-runner libruby2_6-2_6 ruby2.6


5 new packages to install.

Overall download size: 12.6 MiB. Already cached: 0 B. After the operation, additional 52.3

MiB will be used.

Continue? [y/n/v/...? shows all options] (y): y



註冊 gitlab-runner


# gitlab-runner  register


輸入 https://gitlab.com

輸入 Gitlab-runner token

輸入 這個 runner 的敘述

輸入 這個 runner 的 tag ( 這個很重要 )

輸入 這個 runner 的 executor ( 一般都是 docker or shell, 請見官方文件 )



啟動 gitlab-runner

# gitlab-runner  start


Runtime platform                                    arch=amd64 os=linux pid=3192 revision=1b659122 version=12.8.0


觀察相關資訊

# gitlab-runner  status


Runtime platform                                    arch=amd64 os=linux pid=3210 revision=1b659122 version=12.8.0

gitlab-runner: Service is running!


Notes:

  • Runner 的 config 會存放在 /etc/gitlab-runner/config.toml

  • 要成為 gitlab-runner 也要安裝 git 不然執行會出現錯誤

  • 執行的時候相關工作目錄會在 /srv/gitlab-runner/builds/GITLAB-RUNNER-TOKEN/ 下


在 GitLab.com 上面確認 runner 有設定成功



找時間要看的文件

Disable SKEL 說明

https://docs.gitlab.com/runner/install/linux-repository.html#disable-skel


Gitlab runner 安裝說明

https://docs.gitlab.com/runner/install/linux-repository.html



這樣算是又向 GitLab 前進一步了

~ enjoy it



Reference:




星期四, 2月 04, 2021

VS code Azure Account extension 小記

VS code Azure Account extension 小記


OS: openSUSE Leap 15.2

vscode: 1.52.1

Extension: Azure Account v0.9.5


今天要來寫 Azure Account extension in vscode


在很多實驗情境的時候, 可能會使用 vscode 來撰寫 shell script 或是 ansible playbook 來對雲端上面的機器進行實驗. 甚至是使用 Remote SSH 在雲端上面開發.


在 Azure 的使用上面, 我就常常使用到 Cloud Shell 來進行 ansible playbook 的佈署.


VS code 對我最亮眼的地方就是有一大推好用的 Extension.

今天要來寫的就是 Azure Account 這個 extension. 我主要用來在 vscode 內開啟 Bash 版本 Cloud Shell 


安裝方式


開啟 vscode

點選左側 Extension 圖示, 搜尋 Azure 可以找到 Azure Account 這個 Extension



點選 Install 進行安裝 


在 vscode 內 點選 View -- > Command Palette (或是按 Ctrl + Shift + P)



選取 Azure: Open Bash in Cloud Shell



如果還沒有登入 Azure, 會被要求登入 Azure


順利的話就會在 vscode 內開啟 Cloud Shell :)



接下來就可以快樂的在 vscode 內開啟 Cloud Shell 來進行管理 



不用開啟 Azure Portal 真是方便 :)


同場加映: 如果碰到要開啓 Cloud Shell 要求選取目錄導致無法開啟的問題


請見 https://github.com/microsoft/vscode-azure-account/issues/220


解法 

  • 登入 Azure Portal

  • 開啟 Cloud shell

  • 輸入 az account list

  • 複製 tenantId

  • 開啟 VS code

  • 點選 Azure Account extension 設定



在Azure: Tenant 設定將剛剛的 tenantId 貼上去



這樣就解決了

再次感謝 DanielMOliveira 

這個 issue 我也開了快五個月 :p


又向 Azure 前進一步


~ enjoy it


Reference:


 


星期日, 1月 31, 2021

Ansible Dynamic Inventory For GCP 小記

Ansible Dynamic Inventory For GCP 小記


OS: container with openSUSE Leap 15.2

Ansible: 2.10.3


之前有在 Azure 實驗過 Dynamic Inventory


今天要來實驗 Ansible Dynamic Inventory for GCP.


今天會使用到的 module, gcp_compute


先安裝相依的套件


# pip  install --upgrade  pip


# pip3  install  requests  google-auth



前置作業

  • 建立 GCP  Service Account

    • 建立的方式可以參考之前的文章 http://sakananote2.blogspot.com/2020/07/gcp-cloud-storage.html

    • 新增 Key with JSON, 下載 Key 並重新命名test20210131.json

    • 實驗的關係, 給予相關測試權限

      • 如果只是要獲得相關資訊的話, 要有 compute.instances.list 權限, 如果是要套用比較少的 Role 的話, 可以考慮 Compute OS Login 這個 Role, 因為它只有 9 個 assigned permissions

      • 但是這個 Service account 可能會綜合來進行一些工作的執行, 也可以考慮把日後要的權限加進來, 或是精實一點建立不同的 Service account 然後在 ansible 的 module 設定內分開, 這個部分就看大家了.




參考網路上看到的文章


首先在 ansible.cfg 內加入設定


[defaults]

# 預設的hostfile 檔案名稱

# hostfile 已經棄用 

#hostfile = hosts

#inventory = hosts

inventory = gcp.yaml


# 遠端連線使用者

remote_user = root


# ssh 金鑰, 如果沒有設定就是 ssh 預設

# private_key_file = 


# 不詢問就加入遠端主機 ssh key

host_key_checking = False


# 設定 retry files (*.retry) 存放路徑, 預設放家目錄

# 我自己喜歡指定在目前目錄, 以免作完實驗家目錄一堆 .retry

retry_files_save_path = ./ansible-retry

[inventory]

enable_plugins = gcp_compute


  • inventory 指向設定的 gcp.yaml

  • 多加上 [inventory] 設定



新增 gcp.yaml 

檔案內容如下


---

plugin: gcp_compute

projects:

  - sakanatest

auth_kind: serviceaccount

service_account_file: /root/test20210131.json

keyed_groups:

  - key: labels

    prefix: label

  - key: zone

    prefix: zone

groups:

#  development: "'env' in (labels|list)"

  development: "'env' in labels"

# 用機器名稱來分群組

  staging: "'sakana' in name"



  • 專案請對應到自己的專案 ID

  • service_account_file 部分請對應到 剛剛建立的 JSON Key 路徑


接下來建立 GCE 然後給予 label 

  • env: test

  • os: opensuse


進行相關測試 使用 ansible-inventory 指令


#  ansible-inventory  --list  -i  gcp.yaml


擷取部分輸出


    "all": {

        "children": [

            "development",

            "label_env_test",

            "label_os_opensuse",

            "ungrouped",

            "zone_asia_east1_b"

        ]

    },

    "development": {

        "hosts": [

            "34.80.30.116"

        ]

    },

    "label_env_test": {

        "hosts": [

            "34.80.30.116"

        ]

    },

    "label_os_opensuse": {

        "hosts": [

            "34.80.30.116"

        ]

    },

    "zone_asia_east1_b": {

        "hosts": [

            "34.80.30.116"

        ]

    }


  • 這邊指令後面使用 -i 來指定 inventory file 是 gcp.yaml, 不過其實我們剛剛在 ansible.cfg 有指定, 所以其實不加上 -i gcp.yaml 也是可以


這邊可以注意到扣掉 ungrouped 之外有分出 4 個群組

解釋如下

回頭觀察 gcp.yaml 檔案內的設定


keyed_groups:

  - key: labels

    prefix: label

  - key: zone

    prefix: zone

groups:

#  development: "'env' in (labels|list)"

  development: "'env' in labels"

# 用機器名稱來分群組

  staging: "'sakana' in name"


  • 因為有使用 keyed_groups

    • key: zone

      • 所以個別的 zone 會是一個群組, 例如 asia_east1_b

    • key: labels

      • 所以有 共同 label 的 key 與 value 就會會是一個群組, 例如 env: test

  • 因為有使用groups

    • 設定 只要 有 env 關鍵字在 labels 就要歸類到 development 群組

    • 另外一個應用是使用機器的名稱, 我的條件是 sakana 這個關鍵字在 name 裡面就歸類到 staging 群組, 不過目前沒有符合, 就不會被建立


這樣就算測試成功了

以後就可以使用 Dynamic Inventory 的方式, 透過 Label 或是特定的關鍵字分群組

然後在 Ansible 內對不同的群組進行不同的設定


也是前進了一小步



~ enjoy it




Reference: