Cvičení – vytvoření kanálu nasazení
Když máte vytvořené všechny charty Helm, máte teď k dispozici všechny nástroje, které potřebujete k nasazení aplikace do AKS pomocí GitHub Actions. V této lekci dokončíte kanál CI/CD dokončením konečných kroků nasazení.
Mezi kroky nasazení patří:
- Vytvořte úlohu nasazení.
- Nastavení Připojení Open ID (OIDC).
- Nasaďte aplikaci pomocí Nástroje Helm.
- Spusťte nasazení v produkčním prostředí.
Přidání úlohy nasazení
V GitHubu přejděte do svého forku úložiště.
Rozbalte adresář .github/workflows a otevřete soubor build-staging.yml pro úpravy.
Přidejte novou
deploy
úlohu na konec souboru zabuild_push_image
úlohu následujícím způsobem. Nezapomeňte se shodovat s odsazením.Úloha má tři klíče:
runs-on
,needs
apermissions
.- Pro
runs-on
použití,ubuntu-20.04
aby byla konzistentní s jinou úlohou. - Pro
needs
použití názvu první úlohy,build_push_image
takže aplikace se nasadí pouze po sestavení image. - Pro
permissions
, přidejte dva argumenty volanýid-token
acontents
. Nastavteid-token
nawrite
acontents
naread
, pokud chcete udělit GitHub Actions přístup k odesílání požadavků a čtení obsahu úložiště.
- Pro
Přidejte
- uses: actions/checkout@v2
jako první krok úlohy.Přidaná
deploy
úloha by měla vypadat jako následující kód:deploy: runs-on: ubuntu-20.04 needs: build_push_image permissions: id-token: write contents: read steps: - uses: actions/checkout@v2
Přidání kroku Instalace Helmu
Ke stažení a instalaci verze v3.3.1
Helmu použijte akci GitHubu .
Na pravém panelu stránky pro úpravy vyhledejte instalační program nástroje Helm. Vyberte první výsledek publikovaný v Azure.
Výběrem ikony kopírování zkopírujte YAML využití.
Zkopírujte a vložte YAML pod
uses
klíč do build-staging.yml.Přejmenujte krok od
Helm tool installer
doInstall Helm
a připněte klávesuversion
nav3.3.1
.steps: - uses: actions/checkout@v2 - name: Install Helm uses: Azure/setup-helm@v1 with: version: v3.3.1
Přidání kroku ověřování přihlášení k Azure
K ověření GitHub Actions pro přístup k AKS použijte OIDC.
Na pravém panelu vyhledejte přihlašovací údaje Azure a vyberte Přihlášení Azure publikované v Azure.
Výběrem ikony kopírování zkopírujte YAML využití a vložte ho
Install Helm
pod krok v build-staging.yml.Změňte název kroku z
Azure Login
naSign in to Azure with OIDC
.Azure Login
vyžaduje k ověření tři parametry:client-id
,tenant-id
asubscription-id
. Vyplňte tyto parametry zástupnými symboly pro tajné kódy, které nastavíte později.- 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 }}
Na pravém panelu vyhledejte kontext sady a vyberte kontext sady Azure Kubernetes publikovaný v Azure.
Výběrem ikony kopírování zkopírujte YAML využití a vložte ho
Sign in to Azure with OIDC
pod krok v build-staging.yml.resource-group
Vyplňte zástupné symboly tajných kódů, které jste nastavili v předchozí lekci, acluster-name
parametry.- name: Azure Kubernetes set context uses: Azure/aks-set-context@v3 with: resource-group: ${{ secrets.RESOURCE_GROUP }} cluster-name: ${{ secrets.CLUSTER_NAME }}
Soubor build-staging.yml by měl vypadat jako v následujícím příkladu:
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 }}
Nastavení Připojení Open ID (OIDC)
Přiřaďte k tajným kódům hodnoty vytvořením instančního objektu a certifikátů pro přihlášení pomocí OIDC.
Vytvoření instančního objektu
V Azure Cloud Shellu spusťte
az account show
a uložteid
hodnotu z výstupu.Vytvořte instanční objekt spuštěním následujícího příkazu a nahraďte
id
hodnotu z předchozího příkazu následujícím příkazem:$SUBSCRIPTION_ID
az ad sp create-for-rbac --scopes /subscriptions/$SUBSCRIPTION_ID --role Contributor
Zkopírujte výstup JSON a uložte ho pro další krok.
Nastavení tajných kódů
Na stránce úložiště GitHub vyberte kartu Nastavení a pak v nabídce vlevo vyberte Akce tajných kódů a proměnných>. Definujte následující tři nové tajné kódy, které používají výstup z předchozích kroků.
AZURE_CLIENT_ID
: Hodnota"appId"
zaz ad sp create-for-rbac
výstupuAZURE_TENANT_ID
: Hodnota"tenant"
zaz ad sp create-for-rbac
výstupuAZURE_SUBSCRIPTION_ID
: Hodnotaid
zaz account show
výstupu
Pro každý tajný kód:
- Vyberte Nový tajný klíč úložiště.
- Do pole Název zadejte název tajného kódu.
- Jako tajný klíč zadejte hodnotu.
- Vyberte Add secret (Přidat tajný kód).
Přidání federovaných přihlašovacích údajů
Vytvořte federované certifikáty pro autorizaci GitHub Actions pro přístup k aplikaci.
Na webu Azure Portal přejděte na Registrace aplikací.
Vyhledejte a vyberte aplikaci, která odpovídá
displayName
hodnotě vrácené v předchozímaz ad sp create-for-rbac
kroku. Ve výchozím nastavení používá název aplikace časové razítko vytvoření instančního objektu.Ověřte, že hodnoty ID aplikace (ID klienta), ID objektu (ID objektu aplikace) a ID adresáře (ID tenanta) odpovídají předchozímu výstupu JSON.
V levém navigačním panelu vyberte Certifikáty a tajné kódy.
Na obrazovce Certifikáty a tajné kódy vyberte kartu Federované přihlašovací údaje.
Vyberte Přidat přihlašovací údaje.
Pokud chcete přidat pracovní přihlašovací údaje, vyberte na obrazovce Přidat přihlašovací údaje nebo zadejte následující informace:
- Scénář federovaných přihlašovacích údajů: Vyberte GitHub Actions, které nasazují prostředky Azure.
- Organizace: Zadejte uživatelské jméno GitHubu.
- Úložiště: Zadejte mslearn-aks-deployment-pipeline-github-actions.
- Typ entity: Vyberte větev.
- Název větve GitHubu: Zadejte hlavní.
- Název: Zadejte pracovní cred.
- Popis Zadejte testování.
Vyberte Přidat.
Pokud chcete přidat produkční přihlašovací údaje, znovu vyberte Přidat přihlašovací údaje a na obrazovce Přidat přihlašovací údaje zadejte všechny stejné hodnoty jako u předchozích přihlašovacích údajů s výjimkou:
- Typ entity: Vyberte značku.
- Název značky GitHubu: Zadejte v2.0.0, protože v dalším kroku nasadíte verzi 2.
- Název: Zadejte prod-cred.
Vyberte Přidat.
Nasazení aplikace pomocí Nástroje Helm
Teď, když jste nakonfigurovali Helm a udělili přístup ke clusteru, jste připraveni nasadit aplikaci.
Přidání kroku Run Helm Deploy
Zpátky v souboru build-staging.yml na GitHubu vytvořte po posledním kroku úlohy
deploy
nový krok s názvemRun Helm Deploy
. Pod ním přidejte další klíč s názvemrun
.- name: Run Helm Deploy run:
Klíč můžete použít ke spuštění libovolného
run
příkazu prostředí uvnitř kontejneru. Tento kanál používárun
klíč ke spuštění následujícího příkazu Helm: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 }}
Seznamte se s tím, co každý parametr dělá:
Parametr Akce nebo hodnota helm upgrade
Upgraduje nainstalovanou verzi. --install
Pokud verze neexistuje, nainstaluje ji. --create-namespace
Pokud obor názvů v příznaku --namespace
neexistuje, vytvoří ho.--atomic
Pokud se verze nezdaří, odebere všechny nainstalované úlohy. --wait
Čeká na dokončení vydané verze a vrátí OK
stav.--namespace staging contoso-website
Nasadí contoso-website
vydání dostaging
oboru názvů../kubernetes/contoso-website
Umístění adresáře chartu --set image.repository
Aktualizace hodnotu image.repository
v souboru values.yaml pouze pro tuto verzi.--set dns.name
dns.name
Aktualizace klíč v souboru values.yaml pouze pro tuto verzi.Přidejte příkaz do souboru a nastavte ho tak, aby se spustil, počínaje znakem
|
. TentoRun Helm deploy
krok by měl odpovídat tomuto příkladu:... - 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 }}
Dokončený soubor build-staging.yml by měl vypadat jako v následujícím příkladu:
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 }}
Nastavení tajného kódu DNS_NAME
Na nové kartě prohlížeče přejděte na fork úložiště, vyberte kartu Nastavení a pak v nabídce vlevo vyberte Akce tajných kódů a proměnných>.
Vyberte Nový tajný klíč úložiště.
Do pole Název zadejte
DNS_NAME
.Jako tajný klíč zadejte hodnotu název zóny DNS AKS z původního výstupu instalačního skriptu.
Pokud tuto hodnotu nemáte, spusťte v Cloud Shellu následující příkaz a nahraďte hodnoty následujícími
<resource-group-name>
hodnotami:<aks-cluster-name>
az aks show -g <resource-group-name> -n <aks-cluster-name> -o tsv --query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName
Vyberte Add secret (Přidat tajný kód).
Potvrzení změn a otestování přípravného nasazení
Chcete-li potvrdit změny, vyberte Potvrdit změny. Zadejte popis potvrzení a pak vyberte Potvrdit změny.
Výběrem karty Akce zobrazíte spuštěné sestavení.
Po úspěšném sestavení přejděte v prohlížeči a
contoso-staging.<aks-dns-zone-name>
ověřte, že se web zobrazí.
Spuštění nasazení v produkčním prostředí
Dalším krokem je vytvoření produkčního pracovního postupu.
V adresáři .github/workflows v úložišti otevřete soubor build-production.yml pro úpravy.
deploy
Zkopírujte úlohu z přípravného kanálu a vložte ji pod poslední řádek v souboru build-production.yml.Run Helm Deploy
Změňte krok pro nasazení do produkčního oboru názvů změnou příznaku--namespace
zstaging
naproduction
.Na konci příkazu Helm přidejte nový parametr
--set image.tag=${GITHUB_REF##*/}
.Tady použijete funkci Bash s názvem rozšíření parametrů. Rozšíření
${ENV##<wildcard><character>}
vrátí poslední výskyt řetězce zacharacter
.V tomto případě chcete získat pouze název značky, který je reprezentován jako modul runtime
GITHUB_REF
GitHub Actions . Větve jsourefs/heads/<branch>
, zatímco značky jsourefs/tags/<tag>
.Pokud chcete odebrat
refs/tags/
jenom název značky, předáte${GITHUB_REF##*/}
vše za poslední/
proměnnouGITHUB_REF
prostředí.Konečný soubor build-production.yml by měl vypadat jako v následujícím příkladu:
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##*/}
Chcete-li potvrdit změny, vyberte Potvrdit změny. Zadejte popis potvrzení a pak vyberte Potvrdit změny.
Produkční změny
Pokaždé, když spustíte produkční pracovní postup, musíte aktualizovat federovaný certifikát odpovídající verzí značky následujícím způsobem:
Na webu Azure Portal přejděte na stránku aplikace a v levém navigačním panelu vyberte Certifikáty a tajné kódy .
Vyberte kartu Federované přihlašovací údaje.
Vyberte pověření cred.
Na obrazovce Upravit přihlašovací údaje vedle položky Na základě výběru navyšte číslo značky na novou verzi v.x.x.x, například v.2.0.1.
Vyberte Aktualizovat.
V Cloud Shellu spusťte
git pull
a načtěte nejnovější změny. Potom spuštěním následujícího příkazu označte a nasdílejte změny a nahraďte zástupný symbol značkou nové verze:git tag -a v<new version tag> -m 'Create new production deployment' && git push --tags
Po zobrazení výzvy zadejte pat z předchozích cvičení jako heslo.
Na GitHubu otevřete kartu Actions a prohlédněte si spuštěný proces.
Jakmile bude pracovní postup úspěšný, otestujte produkční nasazení, přejděte do
contoso-production.<aks-dns-zone-name>
prohlížeče a potvrďte, že se web zobrazí.
Pokračujte k další jednotce a odstraňte prostředky, aby se vám dál neúčtovaly poplatky.