Integrazione di Cloud Deploy con il tuo sistema CI

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

L'integrazione di Cloud Deploy con il tuo sistema CI è semplice come l'aggiunta di una chiamata all'gcloud CLI di Cloud Deploy. Questa chiamata si verifica nel punto della pipeline CI in cui è pronta per il deployment dell'applicazione.

Prima di iniziare

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

Chiamata a Cloud Deploy dalla pipeline CI

Il comando seguente crea una nuova release, richiamando così un'istanza della 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 assegnato a questa release. Questo valore è obbligatorio.

    Puoi specificare 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 tua pipeline di distribuzione registrata. Questo valore è obbligatorio.

  • REGION

    è la regione in cui crei la release. La regione non deve necessariamente essere la stessa in cui esegui 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 della release, ad esempio passando un'annotazione come commitId=0065ca0. Tutte le annotazioni sulla release vengono restituite quando list o get la release e vengono visualizzate insieme alla release nella console Google Cloud, in modo da poter vedere anche la provenienza della release.

  • [IMAGE_LIST]

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

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

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

Esempio di riferimento diretto dell'immagine

Il seguente comando crea una nuova release, passando direttamente un riferimento a un'immagine, invece che un file degli artefatti di 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 di release basato sulla data o sull'ora, puoi includere '$DATE', 'TIME' o entrambi. L'ora è l'ora UTC della 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-, più la data e l'ora, ad esempio: rel-20220131-1507.

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

Confronto tra artefatti di build e immagini

Sul comando gcloud deploy releases create, puoi passare un set di riferimenti a un'immagine o un riferimento al file degli artefatti di build.

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

    Questo valore è un riferimento a una raccolta di nomi di singole immagini per le sostituzioni del percorso completo delle immagini. Ecco un esempio:

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

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

Esempi di Cloud Build, passaggio di un file degli artefatti della build

Esempio di build Docker

Il seguente file YAML dimostra Cloud Build per il push di un'immagine di build Docker e, infine, crea una release di 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 sulla breve 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 uguale all'hash di commit del repository di codice sorgente. Quindi, negli argomenti release-command si fa riferimento allo stesso hash di commit.

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 visualizzato con il riferimento completo dell'immagine.

Un esempio di configurazione di Cloud Build mediante Skaffold

Il seguente file YAML è il contenuto di una configurazione di build di Cloud Build che include una chiamata a Cloud Deploy per creare una release, con un nome della release basato sulla data. L'esempio mostra anche l'utilizzo di Skaffold 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 Cloud Deploy

Se utilizzi GitHub Actions per l'integrazione continua o altre attività correlate alla distribuzione del software, puoi connetterti a Cloud Deploy per la distribuzione continua utilizzando l'azione GitHub create-cloud-deploy-release.

Connetti GitLab a Cloud Deploy

Se utilizzi GitLab per l'integrazione continua, puoi utilizzare il componente Cloud Deploy di GitHub create-cloud-deploy-release per creare una release di Cloud Deploy.

Puoi anche provare il tutorial end-to-end per utilizzare GitLab con Google Cloud.

Per ulteriori informazioni, consulta la panoramica di GitLab su Google Cloud.

Utilizzo delle annotazioni per monitorare la provenienza dell'uscita

Il flag --annotations= consente di applicare una o più coppie chiave-valore arbitrarie alla release creata da questo comando. Dovresti aggiungere 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

Puoi anche creare un'annotazione il cui valore è l'URL che rimanda alla richiesta di pull, ad esempio. Per maggiori informazioni, consulta Utilizzo di etichette e annotazioni con Cloud Deploy.