ฉันจะใช้การดําเนินการ 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 ให้สร้างข้อมูลลับบนพอร์ทัล
จากนั้น ใช้ชื่อข้อมูลลับที่คุณสร้างในเวิร์กโฟลว์ของคุณที่ใดก็ตามที่คุณต้องการข้อมูลนั้น ตัวอย่างเช่น ใช้ข้อมูลประจําตัว 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 ได้โดยตรงในตัวแก้ไขเวิร์กโฟลว์ของที่เก็บ จากแถบด้านข้าง คุณสามารถค้นหาการดําเนินการที่เฉพาะเจาะจง ดูการดําเนินการที่แนะนํา และเรียกดูหมวดหมู่ที่แนะนําได้
วิธีค้นหาการดําเนินการ:
- ในที่เก็บของคุณ เรียกดูไฟล์เวิร์กโฟลว์ที่คุณต้องการแก้ไข
- เลือกไอคอน แก้ไข ในมุมขวาบนของมุมมองไฟล์
- ใช้แถบด้านข้าง GitHub Marketplace ทางด้านขวาของตัวแก้ไขเพื่อเรียกดูการดําเนินการ
สมมติว่าคุณต้องการปรับใช้เว็บแอปที่ยึดตามคอนเทนเนอร์กับเว็บแอป Azure ถ้าคุณค้นหา GitHub Marketplace คุณจะพบการดําเนินการเหล่านี้:
- azure/webapps-deploy@v1
- azure/login@v1 ที่เราเห็นก่อนหน้านี้
- azure/docker-login@v1
ถ้าคุณเพิ่มการดําเนินการเหล่านี้ลงในงาน 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