Questo documento descrive come richiamare la pipeline di distribuzione di Cloud Deploy dal tuo sistema di integrazione continua (CI).
Integrare Cloud Deploy con il tuo sistema CI è semplice quanto aggiungere un
chiamata a Cloud Deploy gcloud
CLI. 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 le seguenti condizioni siano già soddisfatte:
Hai almeno una pipeline di distribuzione definita e registrato con Cloud Deploy.
Hai almeno un target definito, e la tua pipeline di distribuzione fa riferimento a quel target.
Chiamata a Cloud Deploy dalla pipeline CI
Il comando seguente crea una nuova release, richiamando così una pipeline di distribuzione istanza:
gcloud deploy releases create RELEASE_NAME \
--delivery-pipeline=PIPELINE_NAME \
--region=REGION \
--annotations=[KEY=VALUE,...] \
--images=[IMAGE_LIST]
Dove…
RELEASE_NAME
è il nome assegnato a questa release. Questo valore è obbligatorio.
Puoi specificare i nomi delle release dinamici includendo
'$DATE'
o'$TIME'
oppure entrambi. Ad esempio, se esegui questo comando alle 15:07 UTC,'rel-$TIME'
si 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 questa release. La regione non ha bisogno nella stessa regione in cui eseguirai il deployment dell'applicazione.
[KEY=VALUE,...]
è un elenco facoltativo di una o più annotazioni da applicare alla release, nel di coppie chiave-valore.
Puoi utilizzare le annotazioni per tenere traccia della provenienza della release, ad esempio passando un'annotazione come
commitId=0065ca0
. Tutte le annotazioni sull'uscita sono restituiti quandolist
oget
la release e vengono visualizzati con nella console Google Cloud, quindi puoi vedere anche la provenienza della release.[IMAGE_LIST]
è un elenco separato da virgole di sostituzioni del percorso dal nome dell'immagine all'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 della build Skaffold.Quando Cloud Deploy esegue il rendering del manifest, il nome dell'immagine nel il manifest non sottoposto a rendering viene sostituito con il riferimento completo all'immagine nel del file manifest. 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 con riferimento diretto a un'immagine
Il seguente comando crea una nuova release, passando un riferimento all'immagine anziché un file degli 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 della release in base alla data o all'ora, puoi includere '$DATE'
o 'TIME'
oppure
entrambi. L'ora è l'ora UTC della macchina in cui richiami 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 release con il prefisso rel-
.
più la data e l'ora, ad esempio: rel-20220131-1507
.
È inoltre comune utilizzare l'SHA Git nel nome di una release. Consulta le Esempi di Cloud Build e Docker in questo documento.
Confronto tra artefatti della build e immagini
Nel comando gcloud deploy releases create
, puoi passare un insieme
di riferimenti a immagini o un riferimento a file
degli artefatti della build.
Utilizza
--images=[NAME=TAG,...]
per fare riferimento a uno o più contenitori singoli in formato Docker.Questo valore fa riferimento a una raccolta di singole immagini con nome a immagine sostituzioni del percorso completo. Ecco un esempio:
gcloud deploy releases create my-release --images=image1=path/to/image1:v1@sha256:45db24
Utilizza
--build-artifacts=
per puntare a un file di output degli artefatti della build Skaffold.
Esempi di Cloud Build, passaggio di un file degli artefatti di build
Esempio di build Docker
Il seguente file YAML mostra Cloud Build per un Build Docker push dell'immagine e, infine, crea una release di Cloud Deploy.
Questo esempio crea ed esegue il push di un'immagine in un repository di artefatti
un comando per creare una release, con un nome release basato sul breve commit
SHA. Questo esempio deve essere utilizzato come SCM di Cloud Build
trigger perché
si basa sulla variabile $COMMIT_SHA
.
In questo esempio viene eseguito il push di un'immagine in un tag Docker corrispondente al commit hash del repository di origine. Quindi lo stesso hash di commit, come un tag Docker, a cui si fa riferimento negli 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 sottoposto a rendering con il riferimento completo dell'immagine.
Esempio di configurazione di Cloud Build mediante Skaffold
Il seguente file YAML è il contenuto di una Cloud Build che include una chiamata a Cloud Deploy per creare con un nome della release basato sulla data. Questo esempio mostra anche Skaffold usati 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 usi Azioni GitHub per l'integrazione continua o altro software
relative alla distribuzione, puoi connetterti a Cloud Deploy
la distribuzione continua utilizzando
create-cloud-deploy-release
Azione GitHub.
Connetti GitLab a Cloud Deploy
Se usi GitLab per l'integrazione continua, puoi utilizzare Componente GitLab Cloud Deploy create-cloud-deploy-release per creare una release di Cloud Deploy.
Puoi anche provare il tutorial end-to-end per l'utilizzo di GitLab con Google Cloud.
Per saperne di più, consulta la panoramica di GitLab su Google Cloud.
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 da questo comando. Dovresti aggiungere questo flag
Comando gcloud deploy releases create
.
Ad esempio, puoi utilizzare le seguenti coppie chiave-valore per monitorare l'origine di 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
Potresti anche creare un'annotazione il cui valore sia l'URL che rimanda al pull richiesta, ad esempio. Per ulteriori informazioni, vedi Utilizzo di etichette e annotazioni con Cloud Deploy.