Questo documento descrive come richiamare la pipeline di distribuzione Cloud Deploy dal sistema di integrazione continua (CI).
Per integrare Cloud Deploy con il tuo sistema CI, è sufficiente aggiungere una chiamata all'CLI gcloud
Cloud Deploy. Questa chiamata avviene nel punto della pipeline di CI in cui l'applicazione è pronta per il deployment.
Prima di iniziare
Le istruzioni riportate in questa pagina presuppongono che tu soddisfi già le seguenti condizioni:
Devi avere almeno una pipeline di importazione definita e registrata con Cloud Deploy.
Hai almeno un target definito e la pipeline di importazione fa riferimento a questo target.
Chiamata di 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 che assegni a questa release. Questo valore è obbligatorio.
Puoi specificare i nomi delle release dinamiche includendo
'$DATE'
o'$TIME'
o entrambi. Ad esempio, se esegui questo comando alle 15:07 UTC,'rel-$TIME'
si risolve inrel-1507
.'$DATE'
e'$TIME'
devono essere tra virgolette singole.PIPELINE_NAME
è il nome della pipeline di importazione registrata. Questo valore è obbligatorio.
REGION
è la regione in cui stai creando questa 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 della release vengono riportate quandolist
oget
la release 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 di 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 elementi di build di Skaffold.Quando 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 visualizzato. In altre parole,
image1
, nell'esempio, si trova nel file manifest non visualizzato e viene sostituito nel file manifest visualizzato conpath/to/image1:v1@sha256:45db24
.
Esempio che utilizza il riferimento diretto all'immagine
Il comando seguente crea una nuova release passando direttamente un riferimento all'immagine anziché un file degli elementi 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 della release in base alla data o all'ora, puoi includere '$DATE'
o 'TIME'
o entrambi. L'ora è l'ora UTC della macchina su cui viene invocato il comando. '$DATE'
e '$TIME'
devono essere 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
.
È anche comune utilizzare l'SHA di Git nel nome di una release. Consulta gli esempi di Cloud Build e Docker in questo documento.
Artefatti build e immagini
Al comando gcloud deploy releases create
puoi passare un insieme di riferimenti di immagini o un riferimento a un file di elementi di compilazione.
Utilizza
--images=[NAME=TAG,...]
per fare riferimento a una o più singole immagini del contenitore.Questo valore è un riferimento a una raccolta di sostituzioni del nome di singole immagini con il percorso completo dell'immagine. Ecco un esempio:
gcloud deploy releases create my-release --images=image1=path/to/image1:v1@sha256:45db24
Utilizza
--build-artifacts=
per fare riferimento a un file di output degli elementi di build di Skaffold.
Esempi di Cloud Build, passaggio di un file di artefatti di compilazione
Esempio di compilazione Docker
Il seguente file YAML mostra Cloud Build per un push dell'immagine di una build Docker e, in ultima analisi, crea una release Cloud Deploy.
Questo esempio crea e esegue il push di un'immagine in un repository di elementi e genera un comando per creare una release con un nome basato sull'SHA del commit breve. Questo esempio deve essere utilizzato come attivatore SCM di Cloud Build perché si basa sulla variabile $COMMIT_SHA
.
Questo esempio spinge un'immagine a un tag Docker uguale all'hash del commit del repository di origine. Poi lo stesso hash del commit, come tag Docker, viene richiamato dagli argomenti del 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 visualizzato con il riferimento completo dell'immagine.
Un esempio di configurazione di Cloud Build che utilizza Skaffold
Il seguente file YAML è il contenuto di una configurazione di compilazione Cloud Build che include una chiamata a Cloud Deploy per creare una release con un nome basato sulla data. Questo esempio mostra anche Skaffold usato per la compilazione.
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 GitHub Actions a Cloud Deploy
Se utilizzi GitHub Actions per l'integrazione continua o altre attività correlate al deployment del software, puoi connetterti a Cloud Deploy per il deployment continuo 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 GitLab create-cloud-deploy-release per creare una release Cloud Deploy.
Puoi anche provare il tutorial end-to-end per l'utilizzo di GitLab con Google Cloud.
Utilizzo di annotazioni per monitorare la provenienza della release
Il flag --annotations=
ti 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 da implementare.
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 ulteriori informazioni, consulta Utilizzare etichette e annotazioni con Cloud Deploy.