iT邦幫忙

2021 iThome 鐵人賽

DAY 27
0
自我挑戰組

DevOps的下克上之旅( ° ∀ ° )ノ゙系列 第 27

Day 27 : Github Actions實作自動化推上Azure

在前一些日子的鐵人賽中,我曾經寫過關於Docker in Azure的文章,今天我們接續昨天的Github Actions介紹文章,我們來試著來建立一個CI,自動化將寫好的Express包在Dockerfile中並自動化推上Azure。

相關的程式碼可以查看: Github

撰寫workflow for Azure

其實撰寫Github Actions workflow的步驟不外乎就是,1. 找到自己的需求 2.去Github Marketplace 找到你的Action需求 3. 改寫。我們的需求是push Express到Azure並自動產生一個應用。

  1. 打開Github並搜尋Azure,找到一個你覺得不錯的Actions
    https://ithelp.ithome.com.tw/upload/images/20210929/20119044pgoOuwioyw.png

  2. Optional 如果你沒有Azure帳號、Azure ReourceGroup、Azure arc帳號,可以先參考Day 17,文章會告訴你怎麼建立。az loginaz acr login --name <resourceGroup>做登入

  3. 打開你的Azure,整體的azure是會如同這張圖,ManagementGroup分配Subsription並以此管理可以使用的資源。
    https://ithelp.ithome.com.tw/upload/images/20210929/20119044ILNqqfY6mY.png

訂用用戶->訂用用戶ID,取得你的subscript_id。訂用用戶->資源群組->取得資源群組名稱
https://ithelp.ithome.com.tw/upload/images/20210929/20119044M3DXtUkQu9.png

在Azure CLI建立新的APP:

  • az ad sp create-for-rbac --name "myExpress" --role contributor --scopes /subscriptions/{subscription-id}/resourceGroups/{resource-group} --sdk-auth
    建立一個名為myExpress的service principal,並填入你的subscription-id與resource-group,獲得:
    https://ithelp.ithome.com.tw/upload/images/20210929/20119044O3sNxLoqER.png

如上獲得了AZURE_CREDENTIALS,把上面顯示的JSON加到Github Repository的變數之中。settings -> secrets -> New repository secret。取名為AZURE_CREDENTIALS,並把JSON添加到Value中。

https://ithelp.ithome.com.tw/upload/images/20210929/20119044w5Kd0mwV4g.png

順便把REGISTRY_USERNAMEREGISTRY_PASSWORD加入github secrets中。打開你的資源群組 -> 你的資源群組 -> ACR -> 存取金鑰,使用者名稱與password分別就是你的REGISTRY_USERNAMEREGISTRY_PASSWORD

https://ithelp.ithome.com.tw/upload/images/20210930/20119044NDmTCYgL5R.png

回到workflows中,我們可以先來測試登入:

name: Express to Azure
on: 
  push:
    branches:
      - "master"
  pull_request:
    branches: ["master"]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: azure/login@v1
      with:
        creds: ${{ secrets.AZURE_CREDENTIALS }}
    - run: |
        az account show

顯示成功登入即可:
https://ithelp.ithome.com.tw/upload/images/20210929/20119044JehAk1IJpP.png

接著就是部屬了,參考Day 17就會知道你的login-server與resource-group。我的login-server是luforresourcegroup.azurecr.io、resource-group是luforresourcegroup,workflows寫法如下:

# .github/workflows/main.yml
name: Express to Azure
on: 
  push:
    branches:
      - "master"
  pull_request:
    branches: ["master"]

jobs:
    build-and-deploy:
        runs-on: ubuntu-latest
        steps:
        # checkout the repo
        - name: 'Checkout GitHub Action'
          uses: actions/checkout@master
          
        - name: 'Login via Azure CLI'
          uses: azure/login@v1
          with:
            creds: ${{ secrets.AZURE_CREDENTIALS }}
        
        - uses: azure/docker-login@v1
          with:
            login-server: luforresourcegroup.azurecr.io
            username: ${{ secrets.REGISTRY_USERNAME }}
            password: ${{ secrets.REGISTRY_PASSWORD }}
        - run: |
            docker build . -t luforresourcegroup.azurecr.io/mynodeapp:${{ github.sha }}
            docker push luforresourcegroup.azurecr.io/mynodeapp:${{ github.sha }}

如此一來就能把image自動化推上Azure了,參考Day 17來建立container,並完成API。


上一篇
Day 26 : Github Actions
下一篇
Day 28: Kubernetes 原理
系列文
DevOps的下克上之旅( ° ∀ ° )ノ゙30

尚未有邦友留言

立即登入留言