Gyakorlat – Az üzembehelyezési folyamat létrehozása

Befejeződött

Most, hogy létrehozta a Helm-diagramokat, az összes szükséges eszközzel rendelkezik ahhoz, hogy üzembe helyezze az alkalmazást az AKS-ben a GitHub Actions használatával. Ebben a leckében a CI/CD-folyamatot a végső üzembe helyezési lépések végrehajtásával fejezheti be.

Diagram that shows the procession from triggers, through three build steps, to the deploy step in a pipeline.

Az üzembe helyezés lépései a következők:

  • Hozza létre az üzembe helyezési feladatot.
  • Open ID Csatlakozás (OIDC) beállítása.
  • Telepítse az alkalmazást a Helm használatával.
  • Futtassa az üzembe helyezést éles környezetben.

Az üzembe helyezési feladat hozzáadása

  1. A GitHubon lépjen az adattár adattármásolatára.

  2. Bontsa ki a .github/workflows könyvtárat, és nyissa meg a build-staging.yml fájlt szerkesztésre.

  3. Adjon hozzá egy új deploy feladatot a fájl végén, a feladat után az build_push_image alábbiak szerint. Ügyeljen arra, hogy megfeleljen a behúzásnak.

    A feladat három kulcsból áll: runs-on, needsés permissions.

    • A runs-onmásik ubuntu-20.04 feladattal való konzisztensnek kell lennie.
    • Ehhez needshasználja az első feladat nevét, build_push_imageígy az alkalmazás csak a rendszerkép létrehozása után települ
    • Ehhez permissionsadjon hozzá két argumentumot, és contentsadja hozzá a következőtid-token: Állítsa be id-tokenwrite és contents állítsa be, readhogy a GitHub Actions hozzáférést biztosítson a kérések küldéséhez és az adattár tartalmának olvasásához.
  4. Hozzáadás - uses: actions/checkout@v2 a feladat első lépéseként.

    A hozzáadott deploy feladatnak a következő kódhoz hasonlóan kell kinéznie:

          deploy:
            runs-on: ubuntu-20.04
            needs: build_push_image
            permissions:
              id-token: write
              contents: read
    
            steps:
              - uses: actions/checkout@v2
    

A Helm telepítése lépés hozzáadása

GitHub-művelet használatával töltse le és telepítse a Helm-verziót v3.3.1.

  1. A szerkesztési oldal jobb oldali paneljén keresse meg a Helm-eszköz telepítőt. Válassza ki az Azure által közzétett első eredményt.

    Screenshot that shows the search results for the Helm installer action.

  2. A használati YAML másolásához válassza a másolás ikont.

    Screenshot that shows the copy function after selecting the Helm installer action.

  3. Másolja és illessze be a YAML-et a kulcs alá a uses build-staging.yml.

  4. Nevezze át a lépést a következőre Helm tool installerInstall Helm, és rögzítse a kulcsotv3.3.1.version

        steps:
          - uses: actions/checkout@v2
    
          - name: Install Helm
            uses: Azure/setup-helm@v1
            with:
              version: v3.3.1
    

Az Azure Login hitelesítési lépésének hozzáadása

Az AKS eléréséhez használja az OIDC-t a GitHub Actions hitelesítéséhez.

  1. A jobb oldali panelen keresse meg az Azure-bejelentkezést, és válassza az Azure által közzétett Azure-bejelentkezést.

    Screenshot that shows results for the Azure Login search.

  2. Válassza a másolás ikont a használati YAML másolásához, majd illessze be a Install Helm build-staging.yml lépés alá.

  3. Módosítsa a lépés nevét a következőre Azure LoginSign in to Azure with OIDC: .

  4. Azure Login A hitelesítéshez három paraméter szükséges: client-id, tenant-idés subscription-id. Töltse ki ezeket a paramétereket helyőrzőkkel a később beállított titkos kódokhoz.

          - name: Sign in to Azure with OIDC
            uses: Azure/login@v1.5.1
            with:
              client-id: ${{ secrets.AZURE_CLIENT_ID }}
              tenant-id: ${{ secrets.AZURE_TENANT_ID }}
              subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    
  5. A jobb oldali panelen keresse meg a beállított környezetet, és válassza az Azure Által közzétett Azure Kubernetes set context lehetőséget.

    Screenshot that shows the results for a Set Context search.

  6. Válassza a másolás ikont a használati YAML másolásához, majd illessze be a Sign in to Azure with OIDC build-staging.yml lépés alá. Töltse ki a resource-group korábbi leckében beállított titkos kulcsok helyőrzőit és cluster-name paramétereit.

          - name: Azure Kubernetes set context
            uses: Azure/aks-set-context@v3
            with:
              resource-group: ${{ secrets.RESOURCE_GROUP }}
              cluster-name: ${{ secrets.CLUSTER_NAME }}
    

    A build-staging.yml fájlnak a következő példához hasonlóan kell kinéznie:

    name: Build and push the latest build to staging
    
        on:
          push:
            branches: [ main ]
    
        jobs:
          build_push_image:
            runs-on: ubuntu-20.04
    
            steps:
              - uses: actions/checkout@v2
    
              - name: Set up Buildx
                uses: docker/setup-buildx-action@v3.0.0
    
              - name: Docker Login
                uses: docker/login-action@v3.0.0
                with:
                  registry: ${{ secrets.ACR_NAME }}
                  username: ${{ secrets.ACR_LOGIN }}
                  password: ${{ secrets.ACR_PASSWORD }}
    
              - name: Build and push staging images
                uses: docker/build-push-action@v5.0.0
                with:
                  context: .
                  push: true
                  tags: ${{secrets.ACR_NAME}}/contoso-website:latest
    
          deploy:
            runs-on: ubuntu-20.04
            needs: build_push_image # Will wait for the execution of the previous job
            permissions:
              id-token: write # This is required for requesting the JWT
              contents: read  # This is required for actions/checkout
    
            steps:
              - uses: actions/checkout@v2
    
              - name: Install Helm
                uses: Azure/setup-helm@v1
                with:
                  version: v3.3.1
    
              - name: Sign in to Azure with OIDC
                uses: Azure/login@v1.5.1
                with:
                  client-id: ${{ secrets.AZURE_CLIENT_ID }}
                  tenant-id: ${{ secrets.AZURE_TENANT_ID }}
                  subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    
              - name: Azure Kubernetes set context
                uses: Azure/aks-set-context@v3
                with:
                  resource-group: ${{ secrets.RESOURCE_GROUP }}
                  cluster-name: ${{ secrets.CLUSTER_NAME }}
    

Open ID Csatlakozás (OIDC) beállítása

Az OIDC-vel való bejelentkezéshez rendeljen értékeket a titkos kódokhoz szolgáltatásnév és tanúsítványok létrehozásával.

A szolgáltatásnév létrehozása

  1. Az Azure Cloud Shellben futtassa az account showés mentse az id értéket a kimenetből.

  2. Hozzon létre egy egyszerű szolgáltatást a következő parancs futtatásával, és helyettesítse az id előző parancs értékét a következőhöz $SUBSCRIPTION_ID:

    az ad sp create-for-rbac --scopes /subscriptions/$SUBSCRIPTION_ID --role Contributor 
    
  3. Másolja ki a JSON-kimenetet, és mentse a következő lépéshez.

A titkos kódok beállítása

A GitHub-adattár lapján válassza a Gépház lapot, majd válassza a Titkos kódok és változók>műveletek lehetőséget a bal oldali menüből. Adja meg az alábbi három új titkos kódot, amelyek az előző lépések kimenetét használják.

  • AZURE_CLIENT_ID: A "appId" kimenetből származó az ad sp create-for-rbac érték
  • AZURE_TENANT_ID: A "tenant" kimenetből származó az ad sp create-for-rbac érték
  • AZURE_SUBSCRIPTION_ID: A id kimenetből származó az account show érték

Minden titkos kód esetében:

  1. Válassza az Új tárház titkos kódját.
  2. A Név mezőbe írja be a titkos kód nevét.
  3. A Titkos kód mezőbe írja be az értéket.
  4. Válassza az Add secret (Titkos kód hozzáadása) lehetőséget.

Összevont hitelesítő adatok hozzáadása

Összevont tanúsítványokat hozhat létre, amelyek engedélyezik a GitHub Actions számára az alkalmazás elérését.

  1. Az Azure Portalon nyissa meg a Alkalmazásregisztrációk.

  2. Keresse meg és jelölje ki azt az alkalmazást, amely megfelel az displayName előző az ad sp create-for-rbac lépésben visszaadott értéknek. Alapértelmezés szerint az alkalmazás neve a szolgáltatásnév létrehozásának időbélyegét használja.

  3. Ellenőrizze, hogy az appID (ügyfélazonosító), az objektumazonosító (alkalmazásobjektum-azonosító) és a címtárazonosító (bérlőazonosító) értékei megegyeznek-e az előző JSON-kimenettel.

  4. A bal oldali navigációs sávon válassza a Tanúsítványok > titkos kulcsok lehetőséget.

  5. A Tanúsítványok > titkos kódok képernyőn válassza az Összevont hitelesítő adatok lapot.

  6. Válassza a Hitelesítő adatok hozzáadása lehetőséget.

  7. Az átmeneti hitelesítő adatok hozzáadásához a hitelesítő adatok hozzáadása képernyőn válassza ki vagy adja meg a következő adatokat:

    • Összevont hitelesítőadat-forgatókönyv: Válassza ki az Azure-erőforrásokat üzembe helyező GitHub Actionst.
    • Szervezet: Adja meg a GitHub-felhasználónevet.
    • Adattár: Adja meg az mslearn-aks-deployment-pipeline-github-actions parancsot.
    • Entitás típusa: Ág kiválasztása.
    • GitHub-ág neve: Adja meg a főt.
    • Név: Adja meg a staging-cred értéket.
    • Leírás : Adja meg a tesztelést.
  8. Válassza a Hozzáadás lehetőséget.

    Screenshot of the Add credential screen for the GitHub Actions staging credential.

  9. Az éles hitelesítő adatok hozzáadásához válassza ismét a Hitelesítő adatok hozzáadása lehetőséget, majd a Hitelesítő adatok hozzáadása képernyőn adja meg az összes olyan értéket, mint az előző hitelesítő adat esetében, kivéve:

    • Entitás típusa: Címke kiválasztása.
    • GitHub-címke neve: Adja meg a 2.0.0-s verziót, mert a következő lépésben a 2- es verziót telepíti.
    • Név: Adja meg a prod-cred értéket.
  10. Válassza a Hozzáadás lehetőséget.

Az alkalmazás üzembe helyezése a Helmel

Most, hogy konfigurálta a Helmt, és hozzáférést adott a fürthöz, készen áll az alkalmazás üzembe helyezésére.

A Run Helm Deploy lépés hozzáadása

  1. A GitHub build-staging.yml fájljában a feladat legújabb lépése deploy után hozzon létre egy új, névvel ellátott Run Helm Deploylépést. Alatta adjon hozzá egy másik, úgynevezett runkulcsot.

              - name: Run Helm Deploy
                run:
    
  2. A kulccsal bármilyen rendszerhéjparancsot végrehajthat run a tárolóban. Ez a folyamat a run következő Helm-parancs végrehajtásához használja a kulcsot:

    helm upgrade --install --create-namespace --atomic --wait 
        --namespace staging contoso-website \
        ./kubernetes/contoso-website \
        --set image.repository=${{ secrets.ACR_NAME }} \
        --set dns.name=${{ secrets.DNS_NAME }}
    

    Az egyes paraméterek leírása:

    Paraméter Művelet vagy érték
    helm upgrade Egy telepített kiadás frissítése.
    --install Ha a kiadás nem létezik, telepíti.
    --create-namespace Ha a névtér nem létezik a --namespace jelölőben, hozza létre.
    --atomic Ha a kiadás sikertelen, eltávolítja a telepített összes számítási feladatot.
    --wait Megvárja, amíg a kiadás befejeződik, és visszaadja az állapotot OK .
    --namespace staging contoso-website Üzembe helyezi a kiadást contoso-website a staging névtérben.
    ./kubernetes/contoso-website A diagramkönyvtár helye.
    --set image.repository csak ebben a kiadásban Frissítések a values.yaml fájl értékétimage.repository.
    --set dns.name csak ehhez a dns.name kiadáshoz Frissítések a values.yaml fájl kulcsát.
  3. Adja hozzá a parancsot a fájlhoz, és állítsa be futtatásra a karakterrel | kezdve. A Run Helm deploy lépésnek egyeznie kell a példával:

      ...
          - name: Run Helm Deploy
            run: |
              helm upgrade \
                --install \
                --create-namespace \
                --atomic \
                --wait \
                --namespace staging \
                contoso-website \
                ./kubernetes/contoso-website \
                --set image.repository=${{ secrets.ACR_NAME }} \
                --set dns.name=${{ secrets.DNS_NAME }}
    

    A kész build-staging.yml fájlnak a következő példához hasonlóan kell kinéznie:

    name: Build and push the latest build to staging
    
        on:
          push:
            branches: [ main ]
    
        jobs:
          build_push_image:
            runs-on: ubuntu-20.04
    
            steps:
              - uses: actions/checkout@v2
    
              - name: Set up Buildx
                uses: docker/setup-buildx-action@v3.0.0
    
              - name: Docker Login
                uses: docker/login-action@v3.0.0
                with:
                  registry: ${{ secrets.ACR_NAME }}
                  username: ${{ secrets.ACR_LOGIN }}
                  password: ${{ secrets.ACR_PASSWORD }}
    
              - name: Build and push staging images
                uses: docker/build-push-action@v5.0.0
                with:
                  context: .
                  push: true
                  tags: ${{secrets.ACR_NAME}}/contoso-website:latest
    
          deploy:
            runs-on: ubuntu-20.04
            needs: build_push_image # Waits for the execution of the previous job
            permissions:
              id-token: write # Required for requesting the JWT
              contents: read  # Required for actions/checkout
    
            steps:
              - uses: actions/checkout@v2
    
              - name: Install Helm
                uses: Azure/setup-helm@v1
                with:
                  version: v3.3.1
    
              - name: Sign in to Azure with OIDC
                uses: Azure/login@v1.5.1
                with:
                  client-id: ${{ secrets.AZURE_CLIENT_ID }}
                  tenant-id: ${{ secrets.AZURE_TENANT_ID }}
                  subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    
              - name: Azure Kubernetes set context
                uses: Azure/aks-set-context@v3
                with:
                  resource-group: ${{ secrets.RESOURCE_GROUP }}
                  cluster-name: ${{ secrets.CLUSTER_NAME }}
    
              - name: Run Helm Deploy
                run: |
                  helm upgrade \
                    --install \
                    --create-namespace \
                    --atomic \
                    --wait \
                    --namespace staging \
                    contoso-website \
                    ./kubernetes/contoso-website \
                    --set image.repository=${{ secrets.ACR_NAME }} \
                    --set dns.name=${{ secrets.DNS_NAME }}
    

A DNS_NAME titkos kód beállítása

  1. Egy új böngészőlapon nyissa meg az adattár elágazását, válassza a Gépház lapot, majd válassza a Titkos kulcsok és változók>műveletek lehetőséget a bal oldali menüben.

  2. Válassza az Új tárház titkos kódját.

  3. A Név mezőbe írja be a következőtDNS_NAME:

  4. Titkos kód esetén adja meg az AKS DNS-zónanév értékét az eredeti beállítási szkript kimenetéből.

    Ha nem rendelkezik ezzel az értékkel, futtassa a következő parancsot a Cloud Shellben, és helyettesítse a következő értékeket <resource-group-name><aks-cluster-name>:

    az aks show -g <resource-group-name> -n <aks-cluster-name> -o tsv --query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName
    
  5. Válassza az Add secret (Titkos kód hozzáadása) lehetőséget.

A módosítások véglegesítése és az előkészítési üzembe helyezés tesztelése

  1. A módosítások véglegesítéséhez válassza a Módosítások véglegesítése lehetőséget. Adja meg a véglegesítés leírását, majd válassza a Véglegesítési módosítások lehetőséget.

  2. Válassza a Műveletek lapot a build futtatásának megtekintéséhez.

  3. Miután a build sikeres volt, a böngészőben ellenőrizze contoso-staging.<aks-dns-zone-name> , hogy megjelenik-e a webhely.

Az üzembe helyezés futtatása éles környezetben

A következő lépés az éles munkafolyamat létrehozása.

  1. Az adattár .github/workflows könyvtárában nyissa meg a build-production.yml fájlt szerkesztésre.

  2. Másolja ki a feladatot az deploy előkészítési folyamatból, és illessze be a build-production.yml fájl utolsó sora alá.

  3. Módosítsa a lépést az Run Helm Deploy éles névtérben való üzembe helyezéshez, ha a jelölőt a --namespace következőre stagingproductionmódosítja.

  4. A Helm parancs végén adjon hozzá egy új paramétert. --set image.tag=${GITHUB_REF##*/}

    Itt egy Paraméterbővítés nevű Bash-funkciót használ. A kiterjesztés ${ENV##<wildcard><character>} a sztring utolsó előfordulását adja vissza a következő után character.

    Ebben az esetben csak a GitHub Actions-futtatókörnyezetként GITHUB_REFmegjelenített címkenevet szeretné megkapni. Az ágak a refs/heads/<branch>következők, míg a címkék.refs/tags/<tag>

    El szeretné távolítanirefs/tags/, hogy csak a címke nevét kapja meg, ezért a környezeti ${GITHUB_REF##*/} változóban az utolsó után kell visszaadnia az GITHUB_REF adatokat/.

    Az utolsó build-production.yml fájlnak a következő példához hasonlóan kell kinéznie:

    name: Build and push the tagged build to production
    
    permissions:
      id-token: write # This is required for requesting the JWT
      contents: read  # This is required for actions/checkout
    
    on:
      push:
        tags:
          - 'v*'
    
    jobs:
      build_push_image:
        runs-on: ubuntu-20.04
    
        steps:
          - uses: actions/checkout@v2
    
          - name: Fetch latest version
            id: fetch_version
            run: echo ::set-output name=TAG::${GITHUB_REF#refs/tags/}
    
          - name: Set up Buildx
            uses: docker/setup-buildx-action@v3.0.0
    
          - name: Docker Login
            uses: docker/login-action@v3.0.0
            with:
              registry: ${{ secrets.ACR_NAME }}
              username: ${{ secrets.ACR_LOGIN }}
              password: ${{ secrets.ACR_PASSWORD }}
    
          - name: Build and push production images
            uses: docker/build-push-action@v2
            with:
              context: .
              push: true
              tags: ${{secrets.ACR_NAME}}/contoso-website:latest,${{secrets.ACR_NAME}}/contoso-website:${{ steps.fetch_version.outputs.TAG }}
    
      deploy:
        runs-on: ubuntu-20.04
        needs: build_push_image
    
        steps:
          - uses: actions/checkout@v2
    
          - name: Install Helm
            uses: Azure/setup-helm@v1
            with:
              version: v3.3.1
    
          - name: Login to Azure with OIDC
            uses: azure/login@v1
            with:
              client-id: ${{ secrets.AZURE_CLIENT_ID }}
              tenant-id: ${{ secrets.AZURE_TENANT_ID }}
              subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    
          - name: Azure Kubernetes set context
            uses: Azure/aks-set-context@v3
            with:
              resource-group: ${{ secrets.RESOURCE_GROUP }}
              cluster-name: ${{ secrets.CLUSTER_NAME }}
    
          - name: Run Helm Deploy
            run: |
              helm upgrade \
                --install \
                --create-namespace \
                --atomic \
                --wait \
                --namespace production \
                contoso-website \
                ./kubernetes/contoso-website \
                --set image.repository=${{ secrets.ACR_NAME }} \
                --set dns.name=${{ secrets.DNS_NAME }} \
                --set image.tag=${GITHUB_REF##*/}
    
  5. A módosítások véglegesítéséhez válassza a Módosítások véglegesítése lehetőséget. Adja meg a véglegesítés leírását, majd válassza a Véglegesítési módosítások lehetőséget.

Éles változások

Az éles munkafolyamat minden futtatásakor frissítenie kell az összevont tanúsítványt a megfelelő címkeverzióval, az alábbiak szerint:

  1. Az Azure Portalon lépjen az alkalmazáslapra, és válassza a Tanúsítványok > titkos kulcsok lehetőséget a bal oldali navigációs sávon.

  2. Válassza az Összevont hitelesítő adatok lapot.

  3. Válassza ki a prod-cred hitelesítő adatokat.

  4. A Hitelesítő adatok szerkesztése képernyőn, a Kijelölés alapján elem mellett növelje a címke számát egy új v.x.x.x-hez, például v.2.0.1-hez.

  5. Válassza a Frissítés lehetőséget.

  6. A Cloud Shellben futtassa git pull a legújabb módosítások beolvasását. Ezután futtassa a következő parancsot a módosítások címkézéséhez és leküldéséhez, és helyettesítse az új verziócímkét a helyőrzőhöz:

    git tag -a v<new version tag> -m 'Create new production deployment' && git push --tags
    
  7. Amikor a rendszer kéri, adja meg a PAT-t a korábbi gyakorlatokból jelszóként.

  8. A GitHubon nyissa meg a Műveletek lapot, és tekintse meg a futó folyamatot.

  9. Miután a munkafolyamat sikeres volt, tesztelje az éles üzembe helyezést, lépjen contoso-production.<aks-dns-zone-name> a böngészőbe, és ellenőrizze, hogy megjelenik-e a webhely.

Folytassa a következő leckét az erőforrások törléséhez, hogy azok ne járjanak tovább díjakkal.