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 17 取得资料库资料并将含LINE emoji的讯息传出

>>:  如何衡量万事万物 (8) 观察少数

DAY 11 Big Data 5Vs – Velocity(多样性)

另一个常见资料库分类是从「资料处理*」的应用角度来区分: 交易型Transaction: OLTP:...

D28. 学习基础C、C++语言

D28. 题目练习 这次一样是练3n+1的题目,之前是用C语言,这次用C++来写 #include&...

Day8 Sideproject(作品集) from 0 to 1 -页面流程图

昨天我们画完了 业务流程图 今天要来介绍 页面流程图 要介绍这个之前可能要先讲一下wireframe...

[Day15] 优先性与相依性

当运算式有多个或多个类别的运算子时,我们会以运算子的 优先性 以及 相依性 来决定运算执行的顺序与方...

Golang - debug工具 DELVE

状况 最近的经验是要把公司的程序码翻新 但由於旧有的程序码技术债实在太过庞大,没办法像以前以往接手到...