練習 - 建置實際執行環境應用程式映像
在上一個練習中,您已建置預備工作流程來建置和發佈應用程式映像。 在此單元中,您會建置使用標記版本觸發程式的生產工作流程。
在此練習中,您:
- 建置 Actions 工作流程。
on tag
建立觸發程式。- 建置並推送生產映像。
- 產生個人存取令牌 (PAT)。
- 觸發標記事件。
建立 GitHub Actions 工作流程
若要開始建置管線,請移至 GitHub 網站中範例存放庫的分支,然後選取 [ 動作] 索引標籤。
在左窗格中,選取 [ 新增工作流程]。
在 [ 選擇工作流程 ] 頁面上,選取 [自行設定工作流程]。
將基本工作流程複製並貼到編輯窗格中:
# This is a basic workflow to help you get started with Actions name: CI # Controls when the action will run. Triggers the workflow on push or pull request # events but only for the main branch on: push: branches: [ main ] pull_request: branches: [ main ] # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: # This workflow contains a single job called "build" build: # The type of runner that the job will run on runs-on: ubuntu-latest # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 # Runs a single command using the runners shell - name: Run a one-line script run: echo Hello, world! # Runs a set of commands using the runners shell - name: Run a multi-line script run: | echo Add other actions to build, echo test, and deploy your project.
在編輯窗格上方,將檔案從
main.yml
重新命名為build-production.yml
。將索引
name
鍵從CI
變更為Build and push the tagged build to production
。
建立 『on』 標籤觸發程式
接著,變更 on
機碼中的預設觸發程序。
移除第二個觸發程序,只保留
push
標記。將
branches
金鑰取代為下列tags
索引鍵。 此索引鍵表示工作流程只會在特定標記上執行。 在此情況下,只有在標記遵循v*
模式 (包括v1.0.0
) 時,才會執行該工作流程。name: Build and push the tagged build to production on: push: tags: - 'v*'
設定簽出步驟
如上一個練習所示:
- 將索引
jobs
鍵從ubuntu-latest
變更為ubuntu-20.04
。 - 將
build
機碼重新命名為build_push_image
。 - 在機碼中
steps
,從範本中刪除最後兩個範例步驟,並保留checkout
選項。
- 將索引
建立新步驟以收集必要的版本資訊。 您使用
::set-output
內部命令來建立此步驟。 在簽出動作底下,新增下列幾行:- name: Fetch latest version id: fetch_version run: echo ::set-output name=TAG::${GITHUB_REF#refs/tags/}
您的 YAML 檔案,不含批注,看起來應該如下列範例所示:
name: Build and push the tagged build to production on: push: tags: - 'v*' jobs: build_push_image: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - name: Fetch latest version id: fetch_version run: echo ::set-output name=TAG::${GITHUB_REF#refs/tags/}
新增 Docker 步驟
與暫存工作流程相同,請新增 Docker Login
和 Build and push Docker images
步驟。
在右側面板中,搜尋 Docker 登入。 選取 Docker 發佈的第一個結果。
在 [安裝] 底下,選取複製圖示以複製使用量 YAML。
將複製的 YAML 貼到
Fetch latest version
動作下方。將下列值新增至
registry
、username
和password
索引鍵:registry
:${{ secrets.ACR_NAME }}
username
:${{ secrets.ACR_LOGIN }}
password
:${{ secrets.ACR_PASSWORD }}
刪除其他索引鍵,因為它們不會在此練習中使用。
在 Marketplace 下方的右側面板中,搜尋建置和推送 Docker 映射,然後選取 Docker 所發佈的第一個結果。
在 [安裝] 底下,選取複製圖示以複製使用量 YAML。
將複製的 YAML 貼入先前所複製
docker-login
動作的最後一個機碼下方。將
name
機碼從Build and push Docker images
重新命名為Build and push production images
。將下列值新增至
context
、push
和tags
索引鍵:context
:.
push
:true
tags
:${{secrets.ACR_NAME}}/contoso-website:latest,${{secrets.ACR_NAME}}/contoso-website:${{ steps.fetch_version.outputs.TAG }}
請注意索引鍵的值
tags
與暫存工作流程有何不同。 在 YAML 中使用steps.
是常見的做法,可參考管線中的先前步驟。 當您在步驟中使用set-output
fetch_version
時,會將步驟的GITHUB_REF
輸出設定為變數的值。 此輸出現在可用於steps
物件內的管線。刪除其他索引鍵,因為它們不會在此練習中使用。
在簽出動作和登入動作之間新增另一個呼叫
docker/setup-buildx-action
的動作,以設定 Docker 要使用的建置引擎。 複製下列代碼段,並在和login
動作之間checkout
貼上。- name: Set up Buildx uses: docker/setup-buildx-action@v3.0.0
您的 YAML 檔案,不含批注,看起來應該如下列範例所示:
name: Build and push the tagged build to production on: push: tags: - 'v*' jobs: build_push_image: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - name: Fetch latest version id: fetch_version run: echo ::set-output name=TAG::${GITHUB_REF#refs/tags/} - name: Set up Buildx uses: docker/setup-buildx-action@v3.0.0 - name: Docker Login uses: docker/login-action@v3.0.0 with: registry: ${{ secrets.ACR_NAME }} username: ${{ secrets.ACR_LOGIN }} password: ${{ secrets.ACR_PASSWORD }} - name: Build and push production images uses: docker/build-push-action@v5.0.0 with: context: . tags: ${{secrets.ACR_NAME}}/contoso-website:latest,${{secrets.ACR_NAME}}/contoso-website:${{ steps.fetch_version.outputs.TAG }} push: true
認可變更
若要認可變更,請選取右上方的 [ 認可變更 ] 按鈕。 輸入認可的描述,然後選取 [ 認可變更]。
這次,生產動作不會觸發,因為您並未推送新的標籤,但先前的預備動作會觸發並建置新的 latest
映像。
產生個人存取權杖 (PAT)
您需要 PAT,才能在下一個步驟中推送標記,並在稍後的單元中執行部署腳本。
請前往 GitHub 網站中範例存放庫的分支。 在右上角選取您的設定檔相片,然後選取 [設定]。
在左側功能表的底部選取 [開發人員設定]。
從下拉式清單中選取 個人存取權杖>權杖 (傳統)。
選取 [ 產生個人存取令牌]。
在 [附注] 底下,提供 PAT 的名稱,例如 myPersonalAccessTokenLM。
在 [選取範圍] 下,選取工作流程旁的複選框。
注意
工作流程範圍會授與系統管理員存放庫對 Github 動作的存取權。 您需要此存取權,才能在下一個步驟中推送標記,並在稍後的單元中執行部署腳本。
選取頁面底部的 [產生權杖]。
選取複製圖示來複製 PAT。 儲存 PAT 以用於後續步驟。
觸發標記事件
在 Azure Cloud Shell 中,移至您複製的存放庫並執行
git pull
。執行以下命令:
git tag -a v2.0.0 -m 'My first tag'
執行下列命令。 出現提示時,請提供您的 PAT 作為密碼。
git push --tags
重要
原始存放庫使用 v1.0.0,因此您必須推送不同的標籤,因為重複專案不存在。
選取 [動作] 索引標籤,並檢查執行中的程序。
當程式完成時,請在 Cloud Shell 中執行下列命令,並將 取代
<ACR_NAME>
為ACR_NAME
,以確認結果中會列出兩個標記。az acr repository show-tags --repository contoso-website --name <ACR_NAME> -o table
請繼續進行下一個單元,以瞭解如何使用 Kubernetes 應用程式的封裝工具 Helm 將管線自動化。