Zelfstudie: Builds van containerinstallatiekopieën in de cloud automatiseren bij het doorvoeren van broncode

Naast een snelle taak ondersteunt ACR-taken geautomatiseerde builds van Docker-containerinstallatiekopieën in de cloud wanneer u broncode doorvoert in een Git-opslagplaats. Ondersteunde Git-contexten voor ACR-taken zijn onder andere openbare of privéopslagplaatsen in GitHub of Azure.

Notitie

Op dit moment biedt ACR-taken geen ondersteuning voor de aanvraagtriggers commit of pull in GitHub Enterprise-opslagplaatsen.

In deze zelfstudie wordt met uw ACR-taak één containerinstallatiekopie gemaakt en gepusht, die is opgegeven in een Dockerfile als u broncode in een Git-opslagplaats doorvoert. Als u een taak bestaande uit meerdere stappen wilt maken waarbij een YAML-bestand wordt gebruikt om de stappen voor het bouwen, pushen en optioneel testen van meerdere containers wilt definiëren, raadpleegt u Zelfstudie: een containerwerkstroom met meerdere stappen in de cloud uitvoeren bij het doorvoeren van broncode. Zie Besturingssysteem- en frameworkpatching automatiseren met ACR-taken voor een overzicht van ACR-taken

In deze zelfstudie:

  • Een taak maken
  • De taak testen
  • Taakstatus weergeven
  • De taak activeren met een code-doorvoer

In deze zelfstudie wordt ervan uitgegaan dat u de stappen in de vorige zelfstudie hebt voltooid. Als u dit nog niet hebt gedaan, voert u de stappen in de sectie Vereisten van de vorige zelfstudie uit voordat u doorgaat.

Vereisten

Voorbeeldcode ophalen

In deze zelfstudie wordt ervan uitgegaan dat u de stappen in de vorige zelfstudie hebt voltooid en dat u de voorbeeldopslagplaats hebt gesplitst en gekloond. Als u dit nog niet hebt gedaan, voert u de stappen in de sectie Vereisten van de vorige zelfstudie uit voordat u doorgaat.

Containerregister

U moet een Azure-containerregister in uw Azure-abonnement hebben om deze zelfstudie te voltooien. Als u een register nodig hebt, zie dan de vorige zelfstudie of Snelstartgids: Een containerregister maken met de Azure CLI.

Een persoonlijk toegangstoken van GitHub maken

Als u een taak wilt activeren voor een doorvoer naar een Git-opslagplaats, heeft ACR Tasks een persoonlijk toegangstoken (PAT) nodig om toegang te krijgen tot de opslagplaats. Als u nog geen PAT hebt, voert u de volgende stappen uit om er een in GitHub te genereren:

  1. Navigeer naar de pagina PAT maken op GitHub op https://github.com/settings/tokens/new

  2. Geef een korte beschrijving voor het token op, bijvoorbeeld 'Demo ACR Tasks'

  3. Selecteer bereiken voor ACR om toegang te krijgen tot de opslagplaats. Voor toegang tot een openbare opslagplaats zoals in deze zelfstudie, schakelt u onder repo de opties repo:status and public_repo in

    Schermafbeelding van de pagina Persoonlijk toegangstoken genereren in GitHub

    Notitie

    Als u een PAT wilt genereren om toegang te krijgen tot een privéopslagplaats, selecteert u het bereik voor volledige controle van de opslagplaats.

  4. Selecteer de knop Token genereren (u wordt mogelijk gevraagd om uw wachtwoord te bevestigen)

  5. Kopieer en bewaar het gegenereerde token in een beveiligde locatie (u gebruikt dit token bij het definiëren van een taak in de volgende sectie)

    Schermafbeelding van het gegeneerde persoonlijke toegangstoken in GitHub

De omgeving voorbereiden op de Azure CLI

De build-taak maken

Nu u de stappen hebt voltooid die nodig zijn om ACR Tasks in te schakelen om toewijzingsstatus te lezen en webhooks te maken in een opslagplaats, kunt u een taak maken die een build van een containerinstallatiekopie activeert op doorvoeracties naar de opslagplaats.

Vul eerst deze shell-omgevingsvariabelen met waarden die geschikt zijn voor uw omgeving. Hoewel deze stap strikt genomen niet vereist is, vereenvoudigt u hiermee de uitvoering van meerregelige Azure CLI-opdrachten in deze zelfstudie. Als u deze omgevingsvariabelen niet invult, moet u elke bijbehorende waarde handmatig vervangen wanneer deze wordt weergegeven in de voorbeeldopdrachten.

ACR_NAME=<registry-name>        # The name of your Azure container registry
GIT_USER=<github-username>      # Your GitHub user account name
GIT_PAT=<personal-access-token> # The PAT you generated in the previous section

Maak nu de taak door de volgende opdracht az acr task create uit te voeren.

Notitie

De Dockerfile die in het volgende voorbeeld wordt gebruikt, is afhankelijk van een installatiekopieën van een openbare basiscontainer van Docker Hub. Als u de betrouwbaarheid wilt verbeteren bij het gebruik van openbare inhoud, importeert en beheert u de installatiekopieën in een privé-Azure-containerregister en werkt u uw Dockerfile bij om uw privé beheerde basisinstallatiekopieën te gebruiken. Meer informatie over het werken met openbare installatiekopieën.

az acr task create \
    --registry $ACR_NAME \
    --name taskhelloworld \
    --image helloworld:{{.Run.ID}} \
    --context https://github.com/$GIT_USER/acr-build-helloworld-node.git#master \
    --file Dockerfile \
    --git-access-token $GIT_PAT

Deze taak geeft aan dat elke keer dat code wordt doorgevoerd naar de hoofdvertakking in de opslagplaats zoals is opgegeven met --context, ACR Tasks de containerinstallatiekopie van de code in deze vertakking bouwt. Er wordt gebruik gemaakt van het Dockerfile dat is opgegeven door --file vanuit de hoofdmap. Het argument --image geeft een parameterwaarde van {{.Run.ID}} aan voor het versiegedeelte van de tag van de installatiekopie, zodat de gebouwde installatiekopie correleert met een specifieke build en uniek is gelabeld.

De uitvoer van een geslaagde az acr task create-opdracht is vergelijkbaar met het volgende:

{
  "agentConfiguration": {
    "cpu": 2
  },
  "creationDate": "2010-11-19T22:42:32.972298+00:00",
  "id": "/subscriptions/<Subscription ID>/resourceGroups/myregistry/providers/Microsoft.ContainerRegistry/registries/myregistry/tasks/taskhelloworld",
  "location": "westcentralus",
  "name": "taskhelloworld",
  "platform": {
    "architecture": "amd64",
    "os": "Linux",
    "variant": null
  },
  "provisioningState": "Succeeded",
  "resourceGroup": "myregistry",
  "status": "Enabled",
  "step": {
    "arguments": [],
    "baseImageDependencies": null,
    "contextPath": "https://github.com/gituser/acr-build-helloworld-node#main",
    "dockerFilePath": "Dockerfile",
    "imageNames": [
      "helloworld:{{.Run.ID}}"
    ],
    "isPushEnabled": true,
    "noCache": false,
    "type": "Docker"
  },
  "tags": null,
  "timeout": 3600,
  "trigger": {
    "baseImageTrigger": {
      "baseImageTriggerType": "Runtime",
      "name": "defaultBaseimageTriggerName",
      "status": "Enabled"
    },
    "sourceTriggers": [
      {
        "name": "defaultSourceTriggerName",
        "sourceRepository": {
          "branch": "main",
          "repositoryUrl": "https://github.com/gituser/acr-build-helloworld-node#main",
          "sourceControlAuthProperties": null,
          "sourceControlType": "GitHub"
        },
        "sourceTriggerEvents": [
          "commit"
        ],
        "status": "Enabled"
      }
    ]
  },
  "type": "Microsoft.ContainerRegistry/registries/tasks"
}

De build-taak testen

U hebt nu een taak die uw build definieert. Als u de build-pipeline wilt testen, activeert u een build handmatig door de opdracht az acr task run uit te voeren:

az acr task run --registry $ACR_NAME --name taskhelloworld

Met de opdracht az acr task run streamt u standaard de logboekuitvoer naar de console wanneer u de opdracht uitvoert. De uitvoer is ingekort om de belangrijkste stappen weer te geven.

2020/11/19 22:51:00 Using acb_vol_9ee1f28c-4fd4-43c8-a651-f0ed027bbf0e as the home volume
2020/11/19 22:51:00 Setting up Docker configuration...
2020/11/19 22:51:02 Successfully set up Docker configuration
2020/11/19 22:51:02 Logging in to registry: myregistry.azurecr.io
2020/11/19 22:51:03 Successfully logged in
2020/11/19 22:51:03 Executing step: build
2020/11/19 22:51:03 Obtaining source code and scanning for dependencies...
2020/11/19 22:51:05 Successfully obtained source code and scanned for dependencies
Sending build context to Docker daemon  23.04kB
Step 1/5 : FROM node:15-alpine
[...]
Step 5/5 : CMD ["node", "/src/server.js"]
 ---> Running in 7382eea2a56a
Removing intermediate container 7382eea2a56a
 ---> e33cd684027b
Successfully built e33cd684027b
Successfully tagged myregistry.azurecr.io/helloworld:da2
2020/11/19 22:51:11 Executing step: push
2020/11/19 22:51:11 Pushing image: myregistry.azurecr.io/helloworld:da2, attempt 1
The push refers to repository [myregistry.azurecr.io/helloworld]
4a853682c993: Preparing
[...]
4a853682c993: Pushed
[...]
da2: digest: sha256:c24e62fd848544a5a87f06ea60109dbef9624d03b1124bfe03e1d2c11fd62419 size: 1366
2020/11/19 22:51:21 Successfully pushed image: myregistry.azurecr.io/helloworld:da2
2020/11/19 22:51:21 Step id: build marked as successful (elapsed time in seconds: 7.198937)
2020/11/19 22:51:21 Populating digests for step id: build...
2020/11/19 22:51:22 Successfully populated digests for step id: build
2020/11/19 22:51:22 Step id: push marked as successful (elapsed time in seconds: 10.180456)
The following dependencies were found:
- image:
    registry: myregistry.azurecr.io
    repository: helloworld
    tag: da2
    digest: sha256:c24e62fd848544a5a87f06ea60109dbef9624d03b1124bfe03e1d2c11fd62419
  runtime-dependency:
    registry: registry.hub.docker.com
    repository: library/node
    tag: 9-alpine
    digest: sha256:8dafc0968fb4d62834d9b826d85a8feecc69bd72cd51723c62c7db67c6dec6fa
  git:
    git-head-revision: 68cdf2a37cdae0873b8e2f1c4d80ca60541029bf


Run ID: ca6 was successful after 27s

Een build activeren met een doorvoer

Nu u de taak hebt getest door deze handmatig uit te voeren, gaat u deze automatisch activeren met een wijziging in de broncode.

Controleer eerst of u zich bevindt in de map waarin de lokale kloon van de opslagplaats staat:

cd acr-build-helloworld-node

Voer vervolgens de volgende opdrachten uit om een nieuw bestand te maken, door te voeren en pushen naar uw fork van de opslagplaats op GitHub:

echo "Hello World!" > hello.txt
git add hello.txt
git commit -m "Testing ACR Tasks"
git push origin main

U wordt mogelijk gevraagd om uw GitHub-referenties op te geven wanneer u de opdracht git push uitvoert. Geef uw GitHub-gebruikersnaam op en voer het persoonlijke toegangstoken (PAT) in dat u eerder hebt gemaakt voor het wachtwoord.

Username for 'https://github.com': <github-username>
Password for 'https://githubuser@github.com': <personal-access-token>

Zodra u een doorvoer naar de opslagplaats hebt gepusht, wordt de webhook die is gemaakt door ACE Tasks geactiveerd en wordt een build in Azure Container Registry in gang gezet. Geef de logboeken weer voor de taak die momenteel wordt uitgevoerd om de voortgang van de build te verifiëren en controleren:

az acr task logs --registry $ACR_NAME

De uitvoer is vergelijkbaar met de volgende, waarin de op dit moment uitgevoerde (of de laatst uitgevoerde) taak wordt getoond:

Showing logs of the last created run.
Run ID: ca7

[...]

Run ID: ca7 was successful after 38s

Builds weergeven

Voor een overzicht van de taken die ACR Tasks heeft voltooid voor het register, voert u de opdracht az acr task-list-runs uit:

az acr task list-runs --registry $ACR_NAME --output table

De uitvoer van de opdracht ziet er ongeveer als volgt uit. De runs die ACR Tasks heeft uitgevoerd, worden weergegeven. 'Git Commit' wordt weergegeven in de kolom TRIGGER voor de meest recente taak:

RUN ID    TASK            PLATFORM    STATUS     TRIGGER    STARTED               DURATION
--------  --------------  ----------  ---------  ---------  --------------------  ----------
ca7       taskhelloworld  linux       Succeeded  Commit     2020-11-19T22:54:34Z  00:00:29
ca6       taskhelloworld  linux       Succeeded  Manual     2020-11-19T22:51:47Z  00:00:24
ca5                       linux       Succeeded  Manual     2020-11-19T22:23:42Z  00:00:23

Volgende stappen

In deze zelfstudie leert u hoe u een taak gebruikt om builds van containerinstallatiekopieën automatisch te activeren in Azure wanneer u broncode naar een Git-opslagplaats doorvoert. Ga verder naar de volgende zelfstudie voor informatie over het maken van taken die builds activeren wanneer de basisinstallatiekopie van de containerinstallatiekopie wordt bijgewerkt.