Bagaimana cara menggunakan GitHub Actions untuk disebarkan ke Azure?
Unit ini membahas cara menggunakan tindakan GitHub untuk menyebarkan aplikasi web berbasis kontainer ke Microsoft Azure Web Apps. Ini mencakup beberapa opsi untuk memicu alur kerja. Selanjutnya, Anda akan mempelajari cara bekerja dengan kondisi bersyarat di dalam alur kerja. Terakhir, Anda mempelajari cara membuat dan menghapus sumber daya Azure dengan menggunakan GitHub Actions.
Opsi untuk memicu alur kerja CD
Ada beberapa opsi untuk memulai alur kerja CD. Dalam modul sebelumnya di CI dengan GitHub Actions, Anda mempelajari cara memicu alur kerja dari pendorongan ke repositori GitHub. Namun, untuk CD, Anda mungkin ingin memicu alur kerja penyebaran pada beberapa peristiwa lain.
Salah satu opsinya adalah memicu alur kerja dengan ChatOps. ChatOps menggunakan klien obrolan, chatbot, dan alat komunikasi real time untuk menjalankan tugas. Misalnya, Anda mungkin meninggalkan komentar tertentu dalam permintaan pull yang dapat memulai bot. Bot tersebut mungkin mengomentari kembali dengan beberapa statistik atau menjalankan alur kerja.
Opsi lain, dan yang kami gunakan dalam contoh kami, adalah menggunakan label dalam permintaan pull Anda. Label yang berbeda dapat memulai alur kerja yang berbeda. Misalnya, tambahkan label tahap untuk memulai alur kerja penyebaran ke lingkungan penahapan Anda, atau tambahkan label menyiapkan lingkungan untuk menjalankan alur kerja yang membuat sumber daya Microsoft Azure untuk Anda sebarkan. Untuk menggunakan label, alur kerja Anda terlihat seperti ini:
on:
pull_request:
types: [labeled]
Mengontrol eksekusi dengan kondisional pekerjaan
Seringkali, Anda hanya ingin menjalankan alur kerja jika kondisi tertentu benar.
Alur kerja GitHub menyediakan if kondisional untuk skenario ini. Kondisional menggunakan ekspresi yang dievaluasi saat runtime. Misalnya, Anda ingin menjalankan alur kerja ini jika label tahap ditambahkan ke permintaan pull.
if: contains(github.event.pull_request.labels.*.name, 'stage')
Simpan kredensial dengan GitHub Secrets
Anda tidak pernah ingin mengekspos informasi sensitif dalam file alur kerja. Rahasia GitHub adalah tempat yang aman untuk menyimpan informasi sensitif yang dibutuhkan alur kerja Anda. Berikut adalah contohnya:
Untuk menyebarkan ke sumber daya Azure, GitHub Action harus memiliki izin untuk mengakses sumber daya. Anda tidak ingin menyimpan info masuk Azure Anda di tempat yang mudah terlihat dalam file alur kerja. Sebagai gantinya, Anda dapat menyimpan kredensial Anda di GitHub Secrets.
Untuk menyimpan informasi di Rahasia GitHub, buat rahasia di portal.
Kemudian, gunakan nama rahasia yang Anda buat di alur kerja di mana pun Anda membutuhkan informasi tersebut. Misalnya, gunakan kredensial Azure yang disimpan di Rahasia GitHub dalam creds: atribut tindakan Azure login .
steps:
- name: "Login via Azure CLI"
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
Menyebarkan ke Microsoft Azure menggunakan GitHub Actions
GitHub Marketplace memiliki beberapa tindakan yang membantu Anda mengotomatiskan tugas terkait Azure.
Anda juga dapat mencari dan menelusuri GitHub Actions langsung di editor alur kerja repositori. Dari bilah sisi, Anda dapat mencari Tindakan tertentu, melihat Tindakan unggulan, dan menelusuri kategori unggulan.
Untuk menemukan Tindakan:
- Di repositori Anda, telusuri ke file alur kerja yang ingin Anda edit.
- Pilih ikon Edit di sudut kanan atas tampilan file.
- Gunakan bilah sisi GitHub Marketplace di sebelah kanan editor untuk menelusuri Tindakan.
Misalkan Anda ingin menyebarkan aplikasi web berbasis kontainer ke Azure Web Apps. Jika Anda mencari GitHub Marketplace, Anda akan menemukan tindakan berikut:
- azure/webapps-deploy@v1
- azure/login@v1 yang kita lihat sebelumnya
- azure/docker-login@v1
Jika Anda menambahkan tindakan ini ke pekerjaan Deploy-to-Azure, alur kerja Anda terlihat seperti ini:
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
Perhatikan bahwa pekerjaan ini bergantung pada pekerjaan sebelumnya, Build-Docker-Image. Pekerjaan sebelumnya membuat artefak yang akan disebarkan.
Tindakan azure/login@v1 memerlukan kredensial untuk masuk ke akun Azure Anda sehingga dapat mengakses sumber daya Azure yang ingin Anda sebarkan. Di sini, gunakan kredensial yang kami simpan di Rahasia GitHub.
Hal yang sama berlaku untuk tindakan azure/docker-login@v1 . Karena Anda menyebarkan gambar kontainer, Anda perlu masuk ke registri kontainer privat Anda.
Tindakan azure/webapps-deploy@v1 melakukan penyebaran. Hal ini bergantung pada dua tindakan sebelumnya.
Membuat dan menghapus sumber daya Azure dengan menggunakan GitHub Actions
Karena CD adalah proses otomatis, Anda telah memutuskan untuk menggunakan infrastruktur sebagai kode untuk membuat dan menghapus lingkungan yang Anda sebarkan. GitHub Actions dapat mengotomatiskan tugas-tugas ini di Azure, dan Anda dapat menyertakan tindakan ini dalam alur kerja Anda.
Catatan
Perlu diingat bahwa penting untuk menghapus sumber daya yang tidak lagi Anda gunakan sesegera mungkin untuk menghindari biaya yang tidak perlu.
Salah satu opsinya adalah membuat alur kerja baru dengan dua pekerjaan, satu yang menghasilkan sumber daya dan satu yang menghapusnya. Kemudian, gunakan kondisional untuk menjalankan hanya pekerjaan yang Anda inginkan. Dalam contoh ini, kondisi mencari label dalam permintaan penggabungan dan menjalankan pekerjaan set-up-azure-resources jika label adalah aktifkan lingkungan dan pekerjaan destroy-azure-resources jika label adalah hancurkan lingkungan.
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')
...
Pekerjaan menggunakan Azure CLI untuk membuat dan menghancurkan sumber daya Azure. Untuk informasi selengkapnya tentang Azure CLI, lihat Gambaran Umum Azure CLI.
Berikut adalah contoh langkah-langkah dalam pekerjaan 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}}
Perhatikan bahwa Anda menggunakan tindakan GitHub untuk memeriksa repositori dan masuk ke Azure. Setelah itu, Anda membuat sumber daya yang Anda butuhkan dan menyebarkan kontainer dengan menggunakan Azure CLI.