Cloud & IT Cert Prep · Oppitunti

Jatkuva käyttöönotto Azureen

Laajentakaa putkea käyttöönotto¬vaiheella, joka siirtää koontiversion tuotoksen App Service -paikkaan, suorittaa savutestit ja vaihtaa version tuotantoon hyväksynnän jälkeen.

Oppitunti 3/413 vaihetta

Jatkuva käyttöönotto Azureen on ilmainen Cloud & IT Cert Prep-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Cloud & IT Cert Prep-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Cloud & IT Cert Prep-kurssilla on yhteensä 4 oppituntia.

Mitä jatkuva käyttöönotto on

Jatkuva käyttöönotto (CD) julkaisee automaattisesti tuotantoon jokaisen muutoksen, joka läpäisee CI-testit, ilman manuaalisia toimia. Jatkuva toimitus on tästä hieman kevyempi versio — se automatisoi käyttöönoton testiympäristöön asti ja edellyttää ihmisen hyväksyntää ennen tuotantoa. Molemmat käytännöt perustuvat samaan putki-infrastruktuuriin. Azure Pipelinesissa CD toteutetaan lisäämällä CI-vaiheen jälkeen käyttöönoton vaiheita, jotka kohdistetaan tarvittaessa Azure-ympäristöihin hyväksyntäkynnyksineen.

Monivaiheinen putki: CI + CD

Täydellisessä CI/CD-putkessa on vähintään kolme vaihetta: Build (käännä, testaa ja julkaise artefakti), Deploy to Staging (ota artefakti käyttöön tuotantoa vastaamattomassa paikassa) ja Deploy to Production (vaihda paikka tai ota käyttöön hyväksynnän jälkeen). Vaiheet välittävät artefaktin eteenpäin putkiartefaktien tallennuksen avulla. Testiympäristövaihe suorittaa integrointi- tai savutestit automaattisesti, kun taas tuotantovaihe odottaa manuaalista hyväksyntää ennen jatkamista.

# azure-pipelines.yml: multi-stage CI/CD
trigger:
  branches:
    include: [main]

pool:
  vmImage: ubuntu-latest

stages:
- stage: Build
  jobs:
  - job: BuildApp
    steps:
    - script: npm ci && npm run build
    - task: PublishPipelineArtifact@1
      inputs: {targetPath: dist, artifactName: webapp}

- stage: DeployStaging
  dependsOn: Build
  jobs:
  - deployment: StagingDeploy
    environment: Staging
    strategy:
      runOnce:
        deploy:
          steps:
          - task: AzureWebApp@1
            inputs: {appName: myapp-staging, package: '$(Pipeline.Workspace)/webapp'}

- stage: DeployProduction
  dependsOn: DeployStaging
  jobs:
  - deployment: ProductionDeploy
    environment: Production   # Has manual approval gate
    strategy:
      runOnce:
        deploy:
          steps:
          - task: AzureWebApp@1
            inputs: {appName: myapp, package: '$(Pipeline.Workspace)/webapp'}

Käyttöönottotyöt ja ympäristöt

Käytä käyttöönoton vaiheissa deployment-töitä, älä tavallisia job-töitä. Käyttöönottotyöt tukevat käyttöönottostrategioita (runOnce, rolling, canary), seuraavat käyttöönottohistoriaa ympäristökohtaisesti ja edellyttävät viittausta Azure DevOpsin Environments-ympäristöihin. Ympäristö tallentaa tiedot siihen käyttöönotoista johtaneista putkiajoista, tällä hetkellä käytössä olevasta versiosta sekä hyväksyntäkynnyksistä, tarkistuksista ja resurssien kuntotilasta yhteen koontinäyttöön.

# Deployment job with rolling strategy
- job: RollingDeploy
  strategy:
    rolling:
      maxParallel: 2     # Deploy to 2 targets at a time
      preDeploy:
        steps:
        - script: echo 'Pre-deploy checks'
      deploy:
        steps:
        - task: AzureWebApp@1
          inputs:
            appName: myapp
            package: '$(Pipeline.Workspace)/webapp'
      postRouteDeploy:
        steps:
        - script: curl -f https://myapp.azurewebsites.net/health

Käyttöönotto Azure App Serviceen

AzureWebApp@1-tehtävä ottaa verkkosovelluksen käyttöön Azure App Servicessä. Se tukee käyttöönottoa tiettyyn paikkaan (esimerkiksi staging), ZIP-pakettien, Docker-kuvien sekä JAR/WAR-tiedostojen käyttöönottoa. Kun sovellus on otettu käyttöön staging-paikkaan, vaihda staging-paikka tuotantoon AzureAppServiceManage@0 -tehtävän swap-toiminnolla — tämä on App Servicen ensisijainen käyttöönottotapa ilman käyttökatkoa.

# Deploy to staging slot, then swap to production
steps:
- task: AzureWebApp@1
  displayName: 'Deploy to staging slot'
  inputs:
    azureSubscription: 'AzureProductionSC'
    appType: webAppLinux
    appName: myUniqueWebApp
    deployToSlotOrASE: true
    resourceGroupName: MyRG
    slotName: staging
    package: '$(Pipeline.Workspace)/webapp/app.zip'
    runtimeStack: 'NODE|18-lts'

- task: AzureAppServiceManage@0
  displayName: 'Swap staging into production'
  inputs:
    azureSubscription: 'AzureProductionSC'
    action: Swap Slots
    webAppName: myUniqueWebApp
    resourceGroupName: MyRG
    sourceSlot: staging

Savutestit CD-putkessa

Kun sovellus on otettu käyttöön testiympäristöön, suorita savutestit — vähimmäismäärä testejä, joilla varmistetaan käyttöönoton onnistuminen ja sovelluksen asianmukainen vastaaminen. Savutestit kutsuvat yleensä keskeisiä API-päätepisteitä ja tarkistavat odotetut tilakoodit sekä vastaussisällön. Jos savutestit epäonnistuvat, putki pysähtyy ennen tuotantoon vaihtamista tai hyväksynnän pyytämistä, mikä estää rikkinäisen julkaisun päätymisen käyttäjille.

# Smoke test step after staging deployment
- script: |
    MAX_RETRY=10
    COUNT=0
    until curl -sf https://myUniqueWebApp-staging.azurewebsites.net/health; do
      COUNT=$((COUNT+1))
      if [ $COUNT -ge $MAX_RETRY ]; then
        echo 'Health check failed after $MAX_RETRY attempts'
        exit 1
      fi
      echo 'Waiting for app to start... attempt '$COUNT
      sleep 10
    done
    echo 'App is healthy'
  displayName: 'Smoke test: health endpoint'

Ympäristön hyväksyntäkynnykset

Lisää hyväksyntäkynnyksiä Azure DevOps -ympäristöihin, jotta käyttöönotot edellyttävät manuaalista hyväksyntää ennen jatkamista. Siirry ympäristön asetuksiin ja lisää hyväksynnät — määritä käyttäjät tai ryhmät, joiden on hyväksyttävä käyttöönotto. Kun putki saavuttaa kyseiseen ympäristöön kohdistuvan käyttöönottotyön, se keskeytyy ja lähettää sähköposti-ilmoituksen. Hyväksyjät voivat tarkastella käyttöönoton tietoja ja hyväksyä tai hylätä sen Azure DevOps -portaalissa tai ilmoituksen linkin kautta.

# Pipeline YAML: deployment to production environment
# (Approval configured in Azure DevOps portal on 'Production' environment)
- stage: DeployProduction
  displayName: 'Deploy to Production'
  dependsOn: DeployStaging
  condition: succeeded('DeployStaging')
  jobs:
  - deployment: ProdDeploy
    environment: Production   # <-- Triggers approval gate configured in portal
    strategy:
      runOnce:
        deploy:
          steps:
          - task: AzureWebApp@1
            inputs:
              appName: myapp-prod
              package: '$(Pipeline.Workspace)/webapp/app.zip'

Käyttöönotto Azure Kubernetes Serviceen

Ota säilöön pakatut sovellukset käyttöön AKS:ssä KubernetesManifest@0-tehtävän avulla. Tehtävä käyttää Kubernetesin YAML-manifesteja klusterissa ja tukee valmiiksi imagePullSecrets-määrityksiä sekä canary-käyttöönottoja. Muodosta yhteys AKS-klusteriin Azure DevOpsissa määritetyn Kubernetes-palveluyhteyden avulla. Tehtävä käyttää taustalla komentoa kubectl apply ja odottaa julkaisun valmistumista ennen kuin merkitsee askeleen onnistuneeksi.

# AKS deployment step in Azure Pipelines
- task: KubernetesManifest@0
  displayName: 'Deploy to AKS'
  inputs:
    action: deploy
    kubernetesServiceConnection: 'AKS-Production-SC'
    namespace: production
    manifests: |
      k8s/deployment.yaml
      k8s/service.yaml
    containers: 'mycontainerregistry.azurecr.io/myapp:$(Build.BuildId)'
    imagePullSecrets: acr-secret

Kuvan nimeämisstrategia

Merkitse säilökuvat koonnin tunnisteella ($(Build.BuildId)) tai Git-committien SHA-tunnisteella ($(Build.SourceVersion)), jotta voit aina jäljittää käynnissä olevan säilön täsmälleen siihen koodiversioon, josta se koottiin. Vältä latest-tunnisteen käyttöä tuotannossa — Kubernetes tallentaa sen välimuistiin eikä välttämättä nouda uutta versiota. Tallenna tarkka kuvatunniste putken muuttujaksi ja lisää se Kubernetes-manifesteihin käyttöönoton yhteydessä komennolla envsubst tai sed.

# Tag and push image with build ID in CI stage
- script: |
    IMAGE='mycontainerregistry.azurecr.io/myapp'
    TAG='$(Build.BuildId)'
    docker build -t $IMAGE:$TAG -t $IMAGE:latest .
    az acr login --name mycontainerregistry
    docker push $IMAGE:$TAG
    docker push $IMAGE:latest
    echo "##vso[task.setvariable variable=imageTag;isOutput=true]$TAG"
  name: BuildImage
  displayName: 'Build and push container image'

Palautusstrategiat

Määrittele tuotantokäyttöönottoja varten palautusstrategia, jotta voit palautua nopeasti epäonnistuneesta julkaisusta. App Servicessä palautus tarkoittaa tuotantopaikan vaihtamista takaisin edelliseen staging-versioon. AKS:ssä käytä komentoa kubectl rollout undo. Luo erillinen palautusputki tai lisää manuaalinen palautustyö, jonka voi käynnistää Azure DevOps -portaalista. Dokumentoi palautusmenettely ja harjoittele sitä säännöllisesti — testaamaton palautus ei ole palautus.

# Rollback job triggered manually
- job: Rollback
  condition: and(failed(), eq(variables['Build.Reason'], 'Manual'))
  steps:
  # App Service rollback: swap production back to previous
  - task: AzureAppServiceManage@0
    inputs:
      azureSubscription: 'AzureProductionSC'
      action: Swap Slots
      webAppName: myUniqueWebApp
      resourceGroupName: MyRG
      sourceSlot: production  # Swap production back to staging version
      targetSlot: staging

Käyttöönottoilmoitukset ja valvonta

Suorita jokaisen tuotantokäyttöönoton jälkeen automaattisesti valvontatarkistus, joka varmistaa uuden version toimivuuden. Käytä AzureMonitor@1-putkitarkistusta Azure Monitor -mittareiden kyselyyn — jos virheiden määrä kasvaa käyttöönoton jälkeen, estä putken eteneminen ja käynnistä palautus. Lähetä käyttöönottoilmoitukset Microsoft Teamsiin tai Slackiin webhook-tehtävien avulla, jotta tiimi tietää, milloin käyttöönotto valmistuu ja mikä versio on käytössä.

# Send Teams notification on deployment completion
- task: InvokeRestAPI@1
  displayName: 'Notify Teams channel'
  inputs:
    connectionType: connectedServiceName
    serviceConnection: 'TeamsWebhookSC'
    method: POST
    body: '{
      "text": "Deployed **$(Build.BuildId)** to Production. Committed by $(Build.RequestedFor). <br>View: https://myapp.contoso.com"
    }'
    waitForCompletion: false

Jatkuvan käyttöönoton parhaat käytännöt

Noudata seuraavia jatkuvan käyttöönoton parhaita käytäntöjä: ota käyttöön usein (pienet erät vähentävät riskiä), käytä ominaisuuslippuja käyttöönoton ja julkaisun erottamiseen, automatisoi kaikki laatutarkistukset ennen tuotantoa, käytä tuotantoa vastaavaa staging-ympäristöä, jotta erot eivät peitä virheitä, valvo käyttöönottoikkunoita automaattisilla toimintakuntotarkistuksilla ja pidä aina käytettävissä testattu palautussuunnitelma. Kypsä jatkuvan käyttöönoton putki tekee käyttöönotosta rutiininomaisen tapahtuman suuren stressin aiheuttavan operaation sijaan.

Pikatarkistus

Testaa tässä oppitunnissa oppimasi Microsoft Azure Fundamentals (AZ-900) -käsitteiden ymmärtäminen.

Oppitunnin kertaus

Tässä oppitunnissa opit, että monivaiheiset YAML-putket ketjuttavat Build-, Staging- ja Production-vaiheet välittämällä artefakteja, Environments-ympäristöjä käyttävät käyttöönottotyöt mahdollistavat hyväksyntätarkistukset ja käyttöönottojen seurannan, ja savusumutestit staging-käyttöönoton jälkeen estävät rikkinäisten julkaisujen etenemisen tuotantoon. Seuraavaksi tutustumme Azureen liittyviin GitHub Actions -toimintoihin.

Aloita maksutta

Opi Cloud & IT Cert Prep tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
150
Oppitunnit
600

Usein kysytyt kysymykset

Onko oppitunti ”Jatkuva käyttöönotto Azureen” ilmainen?

Kyllä – oppitunnin ”Jatkuva käyttöönotto Azureen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Cloud & IT Cert Prep-kurssin, päivitä CoddyKit PROhon. Cloud & IT Cert Prep-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Jatkuva käyttöönotto Azureen”?

Laajentakaa putkea käyttöönotto¬vaiheella, joka siirtää koontiversion tuotoksen App Service -paikkaan, suorittaa savutestit ja vaihtaa version tuotantoon hyväksynnän jälkeen. Harjoittelet Cloud & IT Cert Prep-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Cloud & IT Cert Prep-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Cloud & IT Cert Prep-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Jatkuva käyttöönotto Azureen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Cloud & IT Cert Prep-oppitunnilla?

Kyllä. Jokainen Cloud & IT Cert Prep-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Azure DevOps Services -yleiskatsaus
  2. CI-putken rakentaminen Azure Pipelinesilla
  3. Jatkuva käyttöönotto Azureen
  4. GitHub Actions Azuressa
← Takaisin: Cloud & IT Cert Prep