ฉันจะใช้การดําเนินการ GitHub เพื่อปรับใช้กับ Azure ได้อย่างไร

เสร็จสมบูรณ์เมื่อ

หน่วยนี้อธิบายถึงวิธีการใช้การดําเนินการ GitHub เพื่อปรับใช้เว็บแอปตามคอนเทนเนอร์ไปยัง Microsoft Azure Web Apps ซึ่งครอบคลุมตัวเลือกบางอย่างสําหรับการทริกเกอร์เวิร์กโฟลว์ ถัดไป คุณจะได้เรียนรู้วิธีการทํางานกับเงื่อนไขในเวิร์กโฟลว์ สุดท้าย คุณจะได้เรียนรู้เกี่ยวกับวิธีการสร้างและลบทรัพยากร Azure โดยใช้การดําเนินการ GitHub

ตัวเลือกสําหรับการทริกเกอร์เวิร์กโฟลว์ของซีดี

มีตัวเลือกมากมายสําหรับการเริ่มต้นเวิร์กโฟลว์ซีดี ในมอดูลก่อนหน้าบน CI ด้วยการดําเนินการ GitHub คุณได้เรียนรู้วิธีการทริกเกอร์เวิร์กโฟลว์จากการส่งไปที่ที่เก็บ GitHub อย่างไรก็ตาม สําหรับ CD คุณอาจต้องการทริกเกอร์เวิร์กโฟลว์การปรับใช้ในเหตุการณ์อื่นบางอย่าง

ตัวเลือกหนึ่งคือการทริกเกอร์เวิร์กโฟลว์ด้วย ChatOps ChatOps ใช้ไคลเอ็นต์แชทแชทบอทและเครื่องมือการสื่อสารแบบเรียลไทม์เพื่อเรียกใช้งาน ตัวอย่างเช่น คุณอาจแสดงข้อคิดเห็นเฉพาะในคําขอดึงข้อมูลที่สามารถเริ่มต้นออกบอทได้ บอทนั้นอาจแสดงข้อคิดเห็นกลับด้วยสถิติบางอย่างหรือเรียกใช้เวิร์กโฟลว์

ตัวเลือกอื่นและตัวเลือกที่เราใช้ในตัวอย่างของเราคือการใช้ป้ายชื่อในคําขอดึงข้อมูลของคุณ ป้ายชื่อที่แตกต่างกันสามารถเริ่มต้นเวิร์กโฟลว์ที่แตกต่างกันได้ ตัวอย่างเช่น เพิ่มลําดับขั้น ป้ายชื่อเพื่อเริ่มเวิร์กโฟลว์การปรับใช้ในสภาพแวดล้อมการจัดเตรียมของคุณ หรือเพิ่ม หมุนป้ายชื่อสภาพแวดล้อม เพื่อเรียกใช้เวิร์กโฟลว์ที่สร้างทรัพยากร Microsoft Azure ให้คุณปรับใช้ ในการใช้ป้ายชื่อ เวิร์กโฟลว์ของคุณจะมีลักษณะดังนี้:

on:
  pull_request:
    types: [labeled]

ควบคุมการดําเนินการด้วยเงื่อนไขของงาน

บ่อยครั้ง คุณต้องการเรียกใช้เวิร์กโฟลว์เท่านั้นถ้าเงื่อนไขบางอย่างเป็นจริง

เวิร์กโฟลว์ GitHub มีเงื่อนไข if สําหรับสถานการณ์นี้ เงื่อนไขใช้นิพจน์ ที่ได้รับการประเมินในขณะทํางาน ตัวอย่างเช่น คุณต้องการเรียกใช้เวิร์กโฟลว์นี้หากมีการเพิ่มป้ายชื่อ ลําดับขั้น ลงในคําขอดึงข้อมูล

if: contains(github.event.pull_request.labels.*.name, 'stage')

จัดเก็บข้อมูลประจําตัวด้วยข้อมูลลับของ GitHub

คุณไม่ต้องการเปิดเผยข้อมูลที่สําคัญในไฟล์เวิร์กโฟลว์ ข้อมูลลับของ GitHub คือสถานที่ที่ปลอดภัยเพื่อจัดเก็บข้อมูลที่สําคัญที่เวิร์กโฟลว์ของคุณต้องการ ตัวอย่างมีดังนี้:

เพื่อปรับใช้กับทรัพยากร Azure การดําเนินการ GitHub ต้องมีสิทธิ์ในการเข้าถึงทรัพยากร คุณไม่ต้องการจัดเก็บข้อมูลประจําตัว Azure ของคุณในที่ที่มีข้อมูลธรรมดาอยู่ในไฟล์เวิร์กโฟลว์ แต่คุณสามารถจัดเก็บข้อมูลประจําตัวของคุณใน ข้อมูลลับของ GitHub ได้

หากต้องการจัดเก็บข้อมูลในข้อมูลลับของ GitHub ให้สร้างข้อมูลลับบนพอร์ทัล

สกรีนช็อตของอินเทอร์เฟซพอร์ทัล GitHub สําหรับการสร้างข้อมูลลับ

จากนั้น ใช้ชื่อข้อมูลลับที่คุณสร้างในเวิร์กโฟลว์ของคุณที่ใดก็ตามที่คุณต้องการข้อมูลนั้น ตัวอย่างเช่น ใช้ข้อมูลประจําตัว Azure ที่ถูกเก็บไว้ใน GitHub Secrets ในแอตทริบิวต์ creds: ของการดําเนินการ Azure login

steps:
      - name: "Login via Azure CLI"
        uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}

ปรับใช้กับ Microsoft Azure โดยใช้การดําเนินการ GitHub

GitHub Marketplace มีการดําเนินการหลายอย่างที่ช่วยให้คุณทํางานที่เกี่ยวข้องกับ Azure โดยอัตโนมัติ

สกรีนช็อตของ GitHub Marketplace ที่แสดงผลลัพธ์การค้นหาสําหรับ Azure

คุณยังสามารถค้นหาและเรียกดูการดําเนินการ GitHub ได้โดยตรงในตัวแก้ไขเวิร์กโฟลว์ของที่เก็บ จากแถบด้านข้าง คุณสามารถค้นหาการดําเนินการที่เฉพาะเจาะจง ดูการดําเนินการที่แนะนํา และเรียกดูหมวดหมู่ที่แนะนําได้

วิธีค้นหาการดําเนินการ:

  1. ในที่เก็บของคุณ เรียกดูไฟล์เวิร์กโฟลว์ที่คุณต้องการแก้ไข
  2. เลือกไอคอน แก้ไข ในมุมขวาบนของมุมมองไฟล์
  3. ใช้แถบด้านข้าง GitHub Marketplace ทางด้านขวาของตัวแก้ไขเพื่อเรียกดูการดําเนินการ

สมมติว่าคุณต้องการปรับใช้เว็บแอปที่ยึดตามคอนเทนเนอร์กับเว็บแอป Azure ถ้าคุณค้นหา GitHub Marketplace คุณจะพบการดําเนินการเหล่านี้:

ถ้าคุณเพิ่มการดําเนินการเหล่านี้ลงในงาน Deploy-to-Azure เวิร์กโฟลว์ของคุณจะมีลักษณะดังนี้:

  Deploy-to-Azure:
    runs-on: ubuntu-latest
    needs: Build-Docker-Image
    name: Deploy app container to Azure
    steps:
      - name: "Login via Azure CLI"
        uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}

      - uses: azure/docker-login@v1
        with:
          login-server: ${{env.IMAGE_REGISTRY_URL}}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Deploy web app container
        uses: azure/webapps-deploy@v1
        with:
          app-name: ${{env.AZURE_WEBAPP_NAME}}
          images: ${{env.IMAGE_REGISTRY_URL}}/${{ github.repository }}/${{env.DOCKER_IMAGE_NAME}}:${{ github.sha }}

      - name: Azure logout
        run: |
          az logout

โปรดสังเกตว่างานนี้ขึ้นอยู่กับงานก่อนหน้านี้ Build-Docker-Image งานก่อนหน้านี้จะสร้างสิ่งประดิษฐ์ที่ถูกปรับใช้

การดําเนินการ azure/login@v1 จําเป็นต้องมีข้อมูลประจําตัวเพื่อลงชื่อเข้าใช้บัญชี Azure ของคุณเพื่อให้สามารถเข้าถึงทรัพยากร Azure ที่คุณต้องการปรับใช้ได้ ที่นี่ใช้ข้อมูลประจําตัวที่เราจัดเก็บไว้ในความลับของ GitHub

เช่นเดียวกับการดําเนินการ azure/docker-login@v1 เนื่องจากคุณกําลังปรับใช้รูปภาพคอนเทนเนอร์ คุณจําเป็นต้องลงชื่อเข้าใช้รีจิสทรีคอนเทนเนอร์ส่วนตัวของคุณ

การดําเนินการ azure/webapps-deploy@v1 จะดําเนินการปรับใช้ ซึ่งขึ้นอยู่กับการดําเนินการสองก่อนหน้านี้

สร้างและลบทรัพยากร Azure โดยใช้การดําเนินการ GitHub

เนื่องจากซีดีเป็นกระบวนการอัตโนมัติ คุณได้ตัดสินใจใช้โครงสร้างพื้นฐานเป็นโค้ดในการสร้างและนําสภาพแวดล้อมที่คุณปรับใช้ไปใช้ การดําเนินการ GitHub สามารถทํางานเหล่านี้โดยอัตโนมัติบน Azure และคุณสามารถรวมการดําเนินการเหล่านี้ในเวิร์กโฟลว์ของคุณได้

โน้ต

โปรดจําไว้ว่าการฉีกขาดทรัพยากรที่คุณไม่ได้ใช้โดยเร็วที่สุดเท่าที่เป็นไปได้เพื่อหลีกเลี่ยงค่าใช้จ่ายที่ไม่จําเป็น

ตัวเลือกหนึ่งคือการสร้างเวิร์กโฟลว์ใหม่ด้วยงานสองงานหนึ่งรายการที่หมุนทรัพยากรและหนึ่งรายการที่ลบออก จากนั้น ให้ใช้เงื่อนไขเพื่อเรียกใช้งานที่คุณต้องการเท่านั้น ในตัวอย่างนี้ เงื่อนไขจะค้นหาป้ายชื่อในคําขอดึงข้อมูลและเรียกใช้งาน set-up-azure-resources หากป้ายชื่อ หมุน สภาพแวดล้อมและงาน destroy-azure-resources หาก ทําลายสภาพแวดล้อม

jobs:
  set-up-azure-resources:
    runs-on: ubuntu-latest

    if: contains(github.event.pull_request.labels.*.name, 'spin up environment')

    ...

  destroy-azure-resources:
    runs-on: ubuntu-latest

    if: contains(github.event.pull_request.labels.*.name, 'destroy environment')

    ...

งานนี้ใช้ Azure CLI เพื่อสร้างและทําลายทรัพยากร Azure สําหรับข้อมูลเพิ่มเติมเกี่ยวกับ Azure CLI โปรดดู ภาพรวมของ Azure CLI

นี่คือตัวอย่างของขั้นตอนในงาน set-up-azure-resources:

steps:
  - name: Checkout repository
    uses: actions/checkout@v2

  - name: Azure login
    uses: azure/login@v1
    with:
      creds: ${{ secrets.AZURE_CREDENTIALS }}

  - name: Create Azure resource group
    if: success()
    run: |
      az group create --location ${{env.AZURE_LOCATION}} --name ${{env.AZURE_RESOURCE_GROUP}} --subscription ${{secrets.AZURE_SUBSCRIPTION_ID}}
  - name: Create Azure app service plan
    if: success()
    run: |
      az appservice plan create --resource-group ${{env.AZURE_RESOURCE_GROUP}} --name ${{env.AZURE_APP_PLAN}} --is-linux --sku F1 --subscription ${{secrets.AZURE_SUBSCRIPTION_ID}}
  - name: Create webapp resource
    if: success()
    run: |
      az webapp create --resource-group ${{ env.AZURE_RESOURCE_GROUP }} --plan ${{ env.AZURE_APP_PLAN }} --name ${{ env.AZURE_WEBAPP_NAME }}  --deployment-container-image-name nginx --subscription ${{secrets.AZURE_SUBSCRIPTION_ID}}
  - name: Configure webapp to use GitHub Packages
    if: success()
    run: |
      az webapp config container set --docker-custom-image-name nginx --docker-registry-server-password ${{secrets.GITHUB_TOKEN}} --docker-registry-server-url https://docker.pkg.github.com --docker-registry-server-user ${{github.actor}} --name ${{ env.AZURE_WEBAPP_NAME }} --resource-group ${{ env.AZURE_RESOURCE_GROUP }} --subscription ${{secrets.AZURE_SUBSCRIPTION_ID}}

โปรดสังเกตว่าคุณใช้การดําเนินการ GitHub เพื่อตรวจสอบที่เก็บข้อมูลและลงชื่อเข้าใช้ Azure หลังจากนั้น คุณสร้างทรัพยากรที่คุณต้องการและปรับใช้คอนเทนเนอร์โดยใช้ Azure CLI