Azure'a dağıtmak için GitHub Actions'ı nasıl kullanırım?
Bu ünitede, Kapsayıcı tabanlı bir web uygulamasını Microsoft Azure Web Apps'e dağıtmak için GitHub eylemlerinin nasıl kullanılacağı açıklanır. Bir iş akışını tetiklemeyle ilgili bazı seçenekleri kapsar. Ardından, iş akışında koşullularla çalışmayı öğreneceksiniz. Son olarak GitHub Actions'ı kullanarak Azure kaynakları oluşturma ve silme hakkında bilgi ediniyorsunuz.
CD iş akışı tetikleme seçenekleri
Bir CD iş akışı başlatmak için birkaç seçenek bulunur. GitHub Actions ile CI hakkındaki önceki modülde, GitHub deposuna gönderme ile bir iş akışının nasıl tetikleneceğini öğrendiniz. Ancak CD için başka bir olayda bir dağıtım iş akışı tetiklemeniz gerekebilir.
Bir seçenek , iş akışını ChatOps ile tetiklemedir. ChatOps, görevleri çalıştırmak için sohbet istemcilerini, sohbet botlarını ve gerçek zamanlı iletişim araçlarını kullanır. Örneğin, bir çekme isteğine bir botu başlatabilecek belirli bir açıklama koyabilirsiniz. Bu bot, bazı istatistiklerle bir karşı açıklama getirebilir veya bir iş akışı çalıştırabilir.
Bizim de örneğimizde kullandığımız diğer bir seçenek ise çekme isteğinizde etiketler kullanmaktır. Farklı etiketler farklı iş akışlarını başlatabilir. Örneğin, hazırlama ortamınıza bir dağıtım iş akışı başlatmak için bir aşama etiketi ekleyin veya sizin için Microsoft Azure kaynaklarını oluşturacak iş akışını çalıştırmak üzere bir ortam oluştur etiketi ekleyin. Etiketleri kullanmak için iş akışınız şöyle görünür:
on:
pull_request:
types: [labeled]
Bir iş koşul ifadesi ile yürütmeyi denetleme
Genellikle, yalnızca belirli bir koşul doğruysa bir iş akışı çalıştırmak istersiniz.
GitHub iş akışları bu senaryo için koşullu sağlar if . Koşullu, çalışma zamanında değerlendirilen bir ifade kullanır. Örneğin, çekme isteğine bir aşama etiketi eklenirse bu iş akışını çalıştırmak istersiniz.
if: contains(github.event.pull_request.labels.*.name, 'stage')
GitHub Gizli Dizileriyle kimlik bilgilerini depolama
İş akışı dosyasındaki hassas bilgileri hiçbir zaman kullanıma sunmazsınız. GitHub Gizli Dizileri, iş akışınızın ihtiyaç duyduğu hassas bilgileri depolamak için güvenli bir yerdir. İşte bir örnek:
Bir Azure kaynağına dağıtmak için GitHub Action'ın kaynağa erişim izni olması gerekir. Azure kimlik bilgilerinizi iş akışı dosyasında herkese açık bir biçimde depolamak istemezsiniz. Bunun yerine, kimlik bilgilerinizi GitHub Gizli Dizileri'nde depolayabilirsiniz.
Bilgileri GitHub Gizli Dizilerinde depolamak için portalda bir gizli dizi oluşturun.
Ardından, iş akışınızda oluşturduğunuz gizli dizinin adını bu bilgilere ihtiyaç duyduğunuz her yerde kullanın. Örneğin, Bir Azure eyleminin özniteliğinde GitHub Gizli Dizilerinde creds: depolanan Azure login kimlik bilgilerini kullanın.
steps:
- name: "Login via Azure CLI"
uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
GitHub Actions kullanarak Microsoft Azure’a dağıtma
GitHub Market'te Azure ile ilgili görevleri otomatikleştirmenize yardımcı olan çeşitli eylemler vardır.
GitHub Actions örneklerini doğrudan depo iş akışı düzenleyicisinde arayabilir ve bunlara göz atabilirsiniz. Kenar çubuğundan belirli bir Actions örneği arayabilir, öne çıkan Actions örneklerini görüntüleyebilir ve öne çıkan kategorilere göz atabilirsiniz.
Bir Actions örneğini bulmak için:
- Deponuzda, düzenlemek istediğiniz iş akışı dosyasına gidin.
- Dosya görünümünün sağ üst köşesindeki Düzenle simgesini seçin.
- Düzenleyicinin sağ tarafında buluna GitHub Market kenar çubuğunu kullanarak Actions örneklerine göz atın.
Azure Web Apps'e kapsayıcı tabanlı bir web uygulaması dağıtmak istediğinizi varsayalım. GitHub Market'te arama yaparsanız şu eylemleri bulursunuz:
- azure/webapps-deploy@v1
- daha önce gördüğümüz azure/login@v1
- azure/docker-login@v1
Bu eylemleri Deploy-to-Azure işine eklerseniz, iş akışınız şöyle görünür:
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
Bu işin önceki Build-Docker-Image işine bağlı olduğuna dikkat edin. Önceki iş, dağıtılan yapıtı oluşturur.
azure/login@v1 eyleminin, dağıtmak istediğiniz Azure kaynaklarına erişebilmesi için Azure hesabınızda oturum açmak için kimlik bilgileri gerekir. Burada GitHub Gizli Dizilerinde depoladığımız kimlik bilgilerini kullanın.
Aynı durum azure/docker-login@v1 eylemi için de geçerlidir. Kapsayıcı görüntüsü dağıttığınızdan, özel kapsayıcı kayıt defterinizde oturum açmanız gerekir.
azure/webapps-deploy@v1 eylemi dağıtımı gerçekleştirir. Önceki iki eyleme bağlıdır.
GitHub Actions kullanarak Azure kaynakları oluşturma ve silme
CD otomatik bir işlem olduğundan, dağıttığınız ortamları oluşturmak ve devre dışı bırakabilmek için kod olarak altyapıyı kullanmaya karar verdiniz. GitHub Actions bu görevleri Azure'da otomatikleştirebilir ve bu eylemleri iş akışınıza ekleyebilirsiniz.
Not
Gereksiz ücretlerden kaçınmak için artık kullanmadığınız kaynakları en kısa sürede yok etmenin önemli olduğunu unutmayın.
Seçeneklerden biri, biri kaynakları hazırlayan ve diğeri bunları silen iki işi olan yeni bir iş akışı oluşturmaktır. Ardından, yalnızca istediğiniz işi çalıştırmak için bir koşul tümcesi kullanın. Bu örnekte, koşullu tümce çekme isteğinde bir etiket arar ve etiket set-up-azure-resources ise işini, destroy-azure-resources ise işini çalıştırır.
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')
...
İşler, Azure kaynaklarını oluşturmak ve yok etmek için Azure CLI'sini kullanmaktadır. Azure CLI hakkında daha fazla bilgi için bkz. Azure CLI'ya genel bakış.
Aşağıda set-up-azure-resources işindeki adımlara bir örnek verilmiştir:
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}}
Depoyu kullanıma almak ve Azure'da oturum açmak için GitHub eylemlerini kullanacağınıza dikkat edin. Bundan sonra Azure CLI'yi kullanarak ihtiyacınız olan kaynakları oluşturur ve kapsayıcıyı dağıtırsınız.