Azure'a dağıtmak için GitHub Actions'ı nasıl kullanırım?

Tamamlandı

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.

Gizli dizi oluşturmaya yönelik GitHub portalı arabiriminin ekran görüntüsü.

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.

Azure arama sonuçlarını gösteren GitHub Market'in ekran görüntüsü.

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:

  1. Deponuzda, düzenlemek istediğiniz iş akışı dosyasına gidin.
  2. Dosya görünümünün sağ üst köşesindeki Düzenle simgesini seçin.
  3. 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:

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.