Oefening: de implementatiepijplijn maken
Wanneer alle Helm-grafieken zijn gemaakt, hebt u alle hulpmiddelen die u nodig hebt om de toepassing te implementeren op AKS met behulp van GitHub Actions. In deze les voltooit u de CI/CD-pijplijn door de laatste implementatiestappen uit te voeren.
De implementatiestappen omvatten:
- Maak de implementatietaak.
- Open ID instellen Verbinding maken (OIDC).
- Implementeer de toepassing met Helm.
- Voer de implementatie uit in productie.
De implementatietaak toevoegen
Ga in GitHub naar uw fork van de opslagplaats.
Vouw de map .github/workflows uit en open het build-staging.yml-bestand voor bewerken.
Voeg een nieuwe
deploy
taak toe aan het einde van het bestand, na debuild_push_image
taak, als volgt. Zorg ervoor dat deze overeenkomt met de inspringing.De taak heeft drie sleutels:
runs-on
,needs
enpermissions
.ubuntu-20.04
Gebruik ditruns-on
om consistent te zijn met de andere taak.- Gebruik
needs
voor , gebruik de naam van de eerste taak,build_push_image
zodat de toepassing alleen wordt geïmplementeerd nadat de installatiekopie is gebouwd - Voeg
permissions
twee argumenten toe die worden aangeroepenid-token
encontents
. Ingesteldid-token
opwrite
encontents
opread
, om GitHub Actions toegang te verlenen tot het verzenden van aanvragen en het lezen van de inhoud van de opslagplaats.
Voeg toe
- uses: actions/checkout@v2
als de eerste stap van de taak.De toegevoegde
deploy
taak moet eruitzien als de volgende code:deploy: runs-on: ubuntu-20.04 needs: build_push_image permissions: id-token: write contents: read steps: - uses: actions/checkout@v2
De helm-stap installeren toevoegen
Gebruik een GitHub-actie om de Helm-versie v3.3.1
te downloaden en te installeren.
Zoek in het rechterdeelvenster van de bewerkingspagina naar het installatieprogramma van het Helm-hulpprogramma. Selecteer het eerste resultaat dat door Azure is gepubliceerd.
Selecteer het kopieerpictogram om de YAML voor gebruik te kopiëren.
Kopieer en plak de YAML onder de
uses
sleutel in build-staging.yml.Wijzig de naam van de stap in
Helm tool installer
Install Helm
en maak deversion
sleutel vast aanv3.3.1
.steps: - uses: actions/checkout@v2 - name: Install Helm uses: Azure/setup-helm@v1 with: version: v3.3.1
De azure-aanmeldingsverificatiestap toevoegen
Gebruik OIDC om GitHub Actions te verifiëren voor toegang tot AKS.
Zoek in het rechterdeelvenster naar Azure-aanmelding en selecteer Azure Login gepubliceerd door Azure.
Selecteer het kopieerpictogram om de YAML voor gebruik te kopiëren en plak deze onder de
Install Helm
stap in build-staging.yml.Wijzig de naam van de stap in
Azure Login
Sign in to Azure with OIDC
.Azure Login
vereist drie parameters voor verificatie:client-id
,tenant-id
ensubscription-id
. Vul deze parameters in met tijdelijke aanduidingen voor geheimen die u later instelt.- 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 }}
Zoek in het rechterdeelvenster naar de setcontext en selecteer Azure Kubernetes-setcontext die is gepubliceerd door Azure.
Selecteer het kopieerpictogram om de YAML voor gebruik te kopiëren en plak deze onder de
Sign in to Azure with OIDC
stap in build-staging.yml. Vul deresource-group
tijdelijke aanduidingen encluster-name
parameters in voor de geheimen die u in een eerdere eenheid hebt ingesteld.- name: Azure Kubernetes set context uses: Azure/aks-set-context@v3 with: resource-group: ${{ secrets.RESOURCE_GROUP }} cluster-name: ${{ secrets.CLUSTER_NAME }}
Uw build-staging.yml-bestand moet eruitzien als in het volgende voorbeeld:
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 instellen Verbinding maken (OIDC)
Wijs waarden toe aan uw geheimen door een service-principal en certificaten te maken om u aan te melden met OIDC.
De service-principal maken
Voer
az account show
in Azure Cloud Shell de waarde uit en sla dezeid
op uit de uitvoer.Maak een service-principal door de volgende opdracht uit te voeren, waarbij u de
id
waarde van de vorige opdracht$SUBSCRIPTION_ID
vervangt door:az ad sp create-for-rbac --scopes /subscriptions/$SUBSCRIPTION_ID --role Contributor
Kopieer de JSON-uitvoer en sla deze op voor de volgende stap.
De geheimen instellen
Selecteer op de pagina van uw GitHub-opslagplaats het tabblad Instellingen en selecteer vervolgens Acties voor geheimen en variabelen>in het linkermenu. Definieer de volgende drie nieuwe geheimen die gebruikmaken van de uitvoer uit de voorgaande stappen.
AZURE_CLIENT_ID
: De"appId"
waarde uitaz ad sp create-for-rbac
de uitvoerAZURE_TENANT_ID
: De"tenant"
waarde uitaz ad sp create-for-rbac
de uitvoerAZURE_SUBSCRIPTION_ID
: Deid
waarde uitaz account show
de uitvoer
Voor elk geheim:
- Selecteer Nieuw opslagplaatsgeheim.
- Voer bij Naam de geheime naam in.
- Voer voor Geheim de waarde in.
- Selecteer Geheim toevoegen.
Federatieve referenties toevoegen
Federatieve certificaten maken om GitHub Actions toegang te geven tot de toepassing.
Ga in Azure Portal naar App-registraties.
Zoek en selecteer de toepassing die overeenkomt met de
displayName
waarde die in de vorigeaz ad sp create-for-rbac
stap is geretourneerd. De toepassingsnaam gebruikt standaard de tijdstempel van het maken van de service-principal.Controleer of de waarden van de appID (client-id), object-id (toepassingsobject-id) en map-id (tenant-id) overeenkomen met de vorige JSON-uitvoer.
Selecteer certificaten en geheimen in het linkernavigatievenster.
Selecteer in het scherm Certificaten en geheimen het tabblad Federatieve referenties .
Selecteer Referentie toevoegen.
Als u de faseringsreferentie wilt toevoegen, selecteert of voert u in het scherm Referentie toevoegen de volgende gegevens in:
- Scenario met federatieve referenties: Selecteer GitHub Actions die Azure-resources implementeren.
- Organisatie: voer uw GitHub-gebruikersnaam in.
- Opslagplaats: Voer mslearn-aks-deployment-pipeline-github-actions in.
- Entiteitstype: Vertakking selecteren.
- Naam van GitHub-vertakking: Voer de hoofdtekst in.
- Naam: Voer staging-cred in.
- Beschrijving Voer testen in.
Selecteer Toevoegen.
Als u de productiereferentie wilt toevoegen, selecteert u Opnieuw referentie toevoegen en voert u in het scherm Een referentie toevoegen dezelfde waarden in als voor de vorige referentie, behalve:
- Entiteitstype: Selecteer Tag.
- Naam van GitHub-tag: Voer v2.0.0 in, omdat u in de volgende stap versie 2 implementeert.
- Naam: Voer prod-cred in.
Selecteer Toevoegen.
De toepassing implementeren met Helm
Nu u Helm hebt geconfigureerd en toegang hebt verleend tot uw cluster, kunt u de toepassing implementeren.
De stap Helm-implementatie uitvoeren toevoegen
Maak in het build-staging.yml-bestand in GitHub, na de laatste stap in de taak, een nieuwe stap met de
deploy
naamRun Helm Deploy
. Voeg eronder nog een sleutel toe met de naamrun
.- name: Run Helm Deploy run:
U kunt de
run
sleutel gebruiken om elke shell-opdracht in de container uit te voeren. Deze pijplijn gebruikt derun
sleutel om de volgende Helm-opdracht uit te voeren: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 }}
Begrijpen wat elke parameter doet:
Parameter Actie of waarde helm upgrade
Hiermee wordt een geïnstalleerde versie bijgewerkt. --install
Als de release niet bestaat, installeert u deze. --create-namespace
Als de naamruimte in de --namespace
vlag niet bestaat, maakt u deze.--atomic
Als de release mislukt, verwijdert u alle workloads die zijn geïnstalleerd. --wait
Wacht tot de release is voltooid en retourneert OK
de status.--namespace staging contoso-website
Hiermee wordt de contoso-website
release geïmplementeerd in destaging
naamruimte../kubernetes/contoso-website
Locatie van grafiekmap. --set image.repository
Werkt de waarde van image.repository
het bestand values.yaml alleen voor deze release bij.--set dns.name
Werkt de dns.name
sleutel alleen bij in het bestand values.yaml voor deze release.Voeg de opdracht toe aan het bestand en stel deze in om uit te voeren, te beginnen met het
|
teken. DeRun Helm deploy
stap moet overeenkomen met dit voorbeeld:... - 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 }}
Het voltooide build-staging.yml-bestand moet eruitzien als in het volgende voorbeeld:
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 }}
Het DNS_NAME geheim instellen
Ga in een nieuw browsertabblad naar de fork van de opslagplaats, selecteer het tabblad Instellingen en selecteer vervolgens Acties voor geheimen en variabelen>in het linkermenu.
Selecteer Nieuw opslagplaatsgeheim.
Voer bij Naam de tekst
DNS_NAME
in.Voer voor Geheim de waarde van de AKS DNS-zonenaam in uit de uitvoer van het oorspronkelijke installatiescript.
Als u deze waarde niet hebt, voert u de volgende opdracht uit in Cloud Shell, waarbij u uw waarden vervangt door
<resource-group-name>
en<aks-cluster-name>
:az aks show -g <resource-group-name> -n <aks-cluster-name> -o tsv --query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName
Selecteer Geheim toevoegen.
De wijzigingen doorvoeren en de faseringsimplementatie testen
Als u uw wijzigingen wilt doorvoeren, selecteert u Wijzigingen doorvoeren. Voer een beschrijving in voor de doorvoer en selecteer Wijzigingen doorvoeren.
Selecteer het tabblad Acties om de build uit te voeren.
Nadat de build is voltooid, gaat u in uw browser om te
contoso-staging.<aks-dns-zone-name>
bevestigen dat de website wordt weergegeven.
De implementatie uitvoeren in productie
De volgende stap is het maken van de productiewerkstroom.
Open in de map .github/workflows in uw opslagplaats het build-production.yml bestand om te bewerken.
Kopieer de
deploy
taak uit de faseringspijplijn en plak deze onder de laatste regel in het bestand build-production.yml .Wijzig de
Run Helm Deploy
stap voor implementatie in de productienaamruimte door de--namespace
vlag te wijzigen vanstaging
inproduction
.Voeg aan het einde van de Helm-opdracht een nieuwe parameter toe.
--set image.tag=${GITHUB_REF##*/}
Hier gebruikt u een Bash-functie met de naam parameteruitbreiding. De uitbreiding
${ENV##<wildcard><character>}
retourneert het laatste exemplaar van de tekenreeks nacharacter
.In dit geval wilt u alleen de tagnaam ophalen, die wordt weergegeven als de GitHub Actions-runtime.
GITHUB_REF
Vertakkingen zijnrefs/heads/<branch>
, terwijl tags zijnrefs/tags/<tag>
.U wilt verwijderen
refs/tags/
om alleen de tagnaam op te halen, dus u geeft${GITHUB_REF##*/}
door om alles terug te geven na de laatste/
in deGITHUB_REF
omgevingsvariabele.Het uiteindelijke build-production.yml-bestand moet eruitzien als in het volgende voorbeeld:
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##*/}
Als u uw wijzigingen wilt doorvoeren, selecteert u Wijzigingen doorvoeren. Voer een beschrijving in voor de doorvoer en selecteer Wijzigingen doorvoeren.
Productiewijzigingen
Telkens wanneer u de productiewerkstroom uitvoert, moet u het federatieve certificaat als volgt bijwerken met de bijbehorende tagversie:
Ga in Azure Portal naar uw toepassingspagina en selecteer Certificaten en geheimen in het linkernavigatievenster.
Selecteer het tabblad Federatieve referenties .
Selecteer de prod-cred-referentie .
In het scherm Een referentie bewerken, naast Op basis van selectie, kunt u het tagnummer verhogen naar een nieuwe v.x.x.x, zoals v.2.0.1.
Selecteer Bijwerken.
Voer in Cloud Shell uit
git pull
om de meest recente wijzigingen op te halen. Voer vervolgens de volgende opdracht uit om de wijzigingen te taggen en pushen, waarbij u de nieuwe versietag vervangt door de tijdelijke aanduiding:git tag -a v<new version tag> -m 'Create new production deployment' && git push --tags
Wanneer u hierom wordt gevraagd, geeft u de PAT op uit de vorige oefeningen als het wachtwoord.
Open in GitHub het tabblad Acties en bekijk het actieve proces.
Nadat de werkstroom is geslaagd, gaat u naar
contoso-production.<aks-dns-zone-name>
uw browser om de productie-implementatie te testen en controleert u of de website wordt weergegeven.
Ga door naar de volgende eenheid om uw resources te verwijderen, zodat er geen kosten in rekening worden gebracht.