Integrazione di Google Cloud Deploy con il tuo sistema CI

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questo documento descrive come richiamare la pipeline di distribuzione di Google Cloud Deploy dal tuo sistema di integrazione continua (CI).

Integrare Google Cloud Deploy con il tuo sistema CI è facile come aggiungere una chiamata all'gcloud interfaccia a riga di comando di Google Cloud Deploy. Questa chiamata avviene nel punto della pipeline CI in cui la tua applicazione è pronta per il deployment.

Prima di iniziare

Le istruzioni riportate in questa pagina presuppongono che le tue condizioni siano già soddisfatte:

Chiamata a Google Cloud Deploy dalla tua pipeline CI

Il comando seguente crea una nuova release, richiamando così un'istanza di pipeline di distribuzione:

gcloud deploy releases create RELEASE_NAME \
  --delivery-pipeline=PIPELINE_NAME \
  --region=REGION \
  --annotations=[KEY=VALUE,...] \
  --images=[IMAGE_LIST]

Dove...

  • RELEASE_NAME

    è un nome che assegni a questa release. Questo valore è obbligatorio.

    Puoi specificare i nomi dinamici delle release includendo '$DATE', '$TIME' o entrambi. Ad esempio, se richiami questo comando alle 15:07 UTC, 'rel-$TIME' viene risolto in rel-1507. '$DATE' e '$TIME' devono essere racchiusi tra virgolette singole.

  • PIPELINE_NAME

    è il nome della pipeline di distribuzione registrata. Questo valore è obbligatorio.

  • REGION

    è l'area geografica in cui stai creando questa release. Non è necessario che la regione sia la stessa in cui stai eseguendo il deployment dell'applicazione.

  • [KEY=VALUE,...]

    è un elenco facoltativo di una o più annotazioni da applicare alla release, sotto forma di coppie chiave/valore.

    Puoi utilizzare le annotazioni per monitorare la provenienza delle release, ad esempio passando un'annotazione come commitId=0065ca0. Tutte le annotazioni sulla release vengono restituite quando list o get vengono rilasciate e vengono visualizzate con la release nella console Google Cloud, in modo da poter vedere anche la provenienza della release.

  • [IMAGE_LIST]

    è un elenco separato da virgole di sostituzioni dal nome immagine al percorso immagine. Ad esempio: --images=image1=path/to/image1:v1@sha256:45db24,image2=path/to/image2:v1@sha256:55xy18.

    Questo valore non è obbligatorio se trasmetti --build-artifacts, che identifica un file di output di build Skaffold.

    Quando Google Cloud Deploy esegue il rendering del manifest, il nome dell'immagine nel manifest non visualizzato viene sostituito con il riferimento completo dell'immagine nel manifest mostrato. In altre parole, image1, da questo esempio, è nel manifest non visualizzato e viene sostituito nel manifest mostrato con path/to/image1:v1@sha256:45db24.

Esempio di utilizzo del riferimento diretto all'immagine

Il comando seguente crea una nuova release, trasmettendo direttamente un riferimento immagine, anziché un file di artefatti della build:

gcloud deploy releases create my-release \
  --delivery-pipeline=web-app \
  --region=us-central1 \
  --images=image1=path/to/image1:v1@sha256:45db24

In questo esempio, my-release è il nome della release. Se vuoi generare un nome per la release in base alla data o all'ora, puoi includere '$DATE', 'TIME' o entrambi. L'ora corrisponde all'ora UTC sulla macchina in cui richiami il comando. '$DATE' e '$TIME' devono essere racchiusi tra virgolette singole.

Ecco un esempio:

gcloud deploy releases create rel-'$DATE'-'$TIME' \
  --delivery-pipeline=web-app \
  --region=us-central1 \
  --images=image1=path/to/image1:v1@sha256:45db24

In questo esempio, il comando genera un nome di release con il prefisso rel-, oltre alla data e all'ora, ad esempio rel-20220131-1507.

È comune anche utilizzare l'SHA di Git nel nome di una release. Consulta gli esempi di Cloud Build e Docker in questo documento.

Creazione di artefatti e immagini a confronto

Sul comando gcloud deploy releases create, puoi passare un insieme di riferimenti di immagini o un riferimento a file di build build.

  • Utilizza --images=[NAME=TAG,...] per fare riferimento a una o più immagini container singole.

    Questo valore fa riferimento a una raccolta di nomi di immagini singole per sostituire i percorsi completi delle immagini. Ecco un esempio:

    gcloud deploy releases create my-release --images=image1=path/to/image1:v1@sha256:45db24

  • Usa --build-artifacts= per indirizzare a un file di output degli artefatti della build Skaffold.

Esempi di Cloud Build, passando un file degli artefatti di build

Esempio di build Docker

Il seguente file YAML mostra Cloud Build per un push immagine di Docker Build e, infine, crea una release di Google Cloud Deploy.

Questo esempio crea ed esegue il push di un'immagine in un repository di artefatti e crea un comando per creare una release, con un nome di release basato su SHA del commit. Questo esempio deve essere utilizzato come trigger SCM di Cloud Build perché si basa sulla variabile $COMMIT_SHA.

Questo esempio esegue il push di un'immagine in un tag Docker che è uguale all'hash di commit del repository di origine. Quindi viene fatto riferimento allo stesso hash di commit, come tag Docker, agli argomenti comando-release.

steps:
# Build and tag using commit sha
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '.', '-t', 'REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}', '-f', 'Dockerfile']
# Push the container image
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', 'REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}']
# Create release in Google Cloud Deploy
- name: gcr.io/google.com/cloudsdktool/cloud-sdk
  entrypoint: gcloud
  args:
    [
      "deploy", "releases", "create", "rel-${SHORT_SHA}",
      "--delivery-pipeline", "PIPELINE_NAME",
      "--region", "us-central1",
      "--annotations", "commitId=${REVISION_ID}",
      "--images", "IMAGE_NAME=REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}"
    ]

Tieni presente che il nome dell'immagine alla fine di questo esempio "--images", "IMAGE_NAME= viene sostituito nel manifest mostrato con il riferimento completo dell'immagine.

Un esempio di configurazione Cloud Build con Skaffold

Il seguente file YAML è il contenuto di una configurazione di compilazione Cloud Build che include una chiamata a Google Cloud Deploy per creare una release, con un nome di release basato sulla data. Questo esempio mostra anche Skaffold utilizzato per la build.

steps:
- name: gcr.io/k8s-skaffold/skaffold
  args:
    - skaffold
    - build
    - '--interactive=false'
    - '--file-output=/workspace/artifacts.json'
- name: gcr.io/google.com/cloudsdktool/cloud-sdk
  entrypoint: gcloud
  args:
    [
      "deploy", "releases", "create", "rel-${SHORT_SHA}",
      "--delivery-pipeline", "PIPELINE_NAME",
      "--region", "us-central1",
      "--annotations", "commitId=${REVISION_ID}",
      "--build-artifacts", "/workspace/artifacts.json"
    ]

Connetti le azioni GitHub a Google Cloud Deploy

Se utilizzi le azioni GitHub per l'integrazione continua o altre attività relative alla distribuzione del software, puoi connetterti a Google Cloud Deploy per la distribuzione continua utilizzando create-cloud-deploy-releaseGitHub Action.

Utilizzo delle annotazioni per monitorare la provenienza della release

Il flag --annotations= consente di applicare una o più coppie chiave-valore arbitrarie alla release creata dal comando. Aggiungerai questo flag al comando gcloud deploy releases create.

Ad esempio, puoi utilizzare le seguenti coppie chiave-valore per monitorare l'origine dell'immagine di cui eseguire il deployment.

Ecco un esempio:

gcloud deploy releases create web-app-1029rel \
  --delivery-pipeline=web-app \
  --region=us-central1 \
  --annotations=commitId=0065ca0,author=user@company.com \
  --images=image1=path/to/image1:v1@sha256:45db24

Ad esempio, puoi creare un'annotazione il cui valore sia l'URL che rimanda alla richiesta di pull. Per ulteriori informazioni, consulta la pagina relativa all'utilizzo di etichette e annotazioni con Google Cloud Deploy.