Questo documento descrive come richiamare la pipeline di distribuzione di Cloud Deploy dal sistema di integrazione continua (CI).
Integrare Cloud Deploy con il tuo sistema CI è semplice come aggiungere una chiamata all'gcloud
CLI di Cloud Deploy. Questa chiamata si verifica nel punto della pipeline CI in cui l'applicazione è pronta per il deployment.
Prima di iniziare
Le istruzioni in questa pagina presuppongono che le seguenti condizioni siano già soddisfatte:
Avere abilitato le API applicabili.
Hai almeno una pipeline di distribuzione definita e registrata con Cloud Deploy.
Hai almeno un target definito e la tua pipeline di distribuzione fa riferimento a questo target.
Chiamata di Cloud Deploy dalla pipeline CI
Il seguente comando 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
è il nome che assegni a questa release. Questo valore è obbligatorio.
Puoi specificare i nomi delle release dinamiche includendo
'$DATE'
,'$TIME'
o entrambi. Ad esempio, se richiami questo comando alle 15:07 UTC,'rel-$TIME'
risolve inrel-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 stai creando 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 nella release vengono restituite quandolist
oget
la release e vengono visualizzate insieme alla release nella console Google Cloud, in modo che tu possa 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 visualizzato e viene sostituito nel manifest sottoposto a rendering conpath/to/image1:v1@sha256:45db24
.
Esempio di utilizzo del riferimento diretto all'immagine
Il seguente comando crea una nuova release, passando direttamente un riferimento a un'immagine anziché 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 in base alla data o all'ora, puoi includere '$DATE'
, 'TIME'
o entrambi. L'ora corrisponde all'ora UTC sulla macchina su 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
.
È comune anche utilizzare l'SHA Git nel nome di una release. Vedi gli esempi di Cloud Build e Docker in questo documento.
Confronto tra artefatti della build e le immagini
Con il comando gcloud deploy releases create
, puoi passare un insieme di riferimenti a immagini o un riferimento al file degli artefatti di build.
Utilizza
--images=[NAME=TAG,...]
per fare riferimento a una o più immagini container individuali.Questo valore è un riferimento a una raccolta di nomi di singole immagini alle sostituzioni del percorso completo delle immagini. Ecco un esempio:
gcloud deploy releases create my-release --images=image1=path/to/image1:v1@sha256:45db24
Utilizza
--build-artifacts=
per rimandare a un file di output degli artefatti di build Skaffold.
Esempi di Cloud Build, passaggio di un file degli artefatti della build
Esempio di build Docker
Il seguente file YAML mostra Cloud Build per un push di 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 sull'SHA di commit breve. 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 a un tag Docker che corrisponde all'hash di commit del repository di origine. Quindi allo stesso hash di commit di un tag Docker viene fatto riferimento agli argomenti release-command.
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 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. 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 Cloud Deploy
Se utilizzi le azioni GitHub 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
.
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. Aggiungi 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 anche 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 Cloud Deploy.