Puoi utilizzare immagini container di Docker Hub per eseguire le tue attività in Cloud Build. Inoltre, se la tua build genera immagini, puoi eseguirne il push su Docker Hub. Questa pagina descrive come scrivere file di configurazione di compilazione per eseguire il push e il pull delle immagini Docker Hub. Per una panoramica di tutti i campi disponibili in un file di configurazione della build, consulta la Panoramica della configurazione della build.
Pull delle immagini pubbliche da Docker Hub
Puoi estrarre immagini Docker ufficiali, immagini certificate Docker e immagini personalizzate archiviate in Docker Hub nel passaggio della build
specificando il nome dell'immagine nel campo name
. Cloud Build esegue prima il pull dell'immagine specificata da Docker Hub, quindi utilizza l'immagine per eseguire il passaggio di build.
Nell'esempio seguente, Cloud Build estrae l'immagine Docker per
maven
per eseguire il comando mvn
specificato in args
:
YAML
steps:
- name: "maven"
args: ["mvn", "--version"]
JSON
{
"steps": [
{
"name": "maven",
"args": [
"mvn",
"--version"
]
}
]
}
Archiviazione delle credenziali Docker in Secret Manager
Per eseguire il pull delle immagini private ed eseguire il push di immagini pubbliche e private in Docker Hub, Cloud Build dovrà eseguire l'autenticazione in Docker con le tue credenziali. Per includere le credenziali Docker nelle build, devi prima archiviarle in Secret Manager, quindi concedere a Cloud Build l'autorizzazione per accedere al secret da Secret Manager.
Per archiviare le credenziali Docker in Secret Manager:
Vai alla pagina di Secret Manager nella console Google Cloud:
Nella pagina Secret Manager, fai clic su Crea secret.
Nella pagina Crea secret, in Nome, inserisci
docker-username
.Nel campo Valore secret, inserisci il tuo nome utente Docker.
Lascia invariata la sezione Regioni.
Fai clic sul pulsante Crea secret.
Ripeti i passaggi precedenti per archiviare la password Docker in Secret Manager.
Per concedere il ruolo IAM Accesso al secret di Secret Manager per il secret all'account di servizio Cloud Build:
Apri la pagina di Secret Manager nella console Google Cloud:
Seleziona la casella di controllo del secret corrispondente al nome utente e alla password Docker.
Se non è già aperto, fai clic su Mostra riquadro informazioni per aprirlo.
Nel riquadro, in Autorizzazioni, fai clic su Aggiungi entità.
Nella casella di testo Nuove entità, inserisci l'indirizzo email del tuo account di servizio Cloud Build nel formato
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
, dovePROJECT_NUMBER
è il numero del progetto in cui esegui le build. Puoi trovare il numero del progetto nella pagina Impostazioni progetto.Nella casella a discesa Seleziona un ruolo, seleziona il ruolo Utente di accesso secret di Secret Manager.
Fai clic su Salva.
Pull di immagini private da Docker Hub
Per eseguire il pull di immagini private da Docker Hub:
Assicurati di aver archiviato le credenziali Docker in Secret Manager e concesso a Cloud Build le autorizzazioni per accedere al secret.
Nel file di configurazione della build:
- Dopo tutta la build
steps
, aggiungi un campoavailableSecrets
che specifichi la versione del secret e la variabile env per il nome utente e la password Docker. - Nel passaggio relativo alla build, in cui vuoi specificare il nome utente e la password:
- Aggiungi un campo
entrypoint
che punta abash
per utilizzare lo strumento bash nel passaggio di creazione. È obbligatorio per fare riferimento alla variabile di ambiente per il secret. - Aggiungi un campo
secretEnv
specificando la variabile di ambiente per nome utente e password. - Nel campo
args
, aggiungi un flag-c
come primo argomento. Qualsiasi stringa passata dopo -c viene trattata come un comando. Per saperne di più sull'esecuzione dei comandi Bash con -c, consulta la documentazione di Bash. - Quando specifichi il secret nel campo
args
, specificalo utilizzando la variabile di ambiente con prefisso$$
.
- Aggiungi un campo
Il seguente file di configurazione di compilazione mostra come accedere a Docker utilizzando il nome utente e la password di Docker archiviati in Secret Manager ed eseguire un'immagine privata.
YAML
steps: - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker login --username=$$USERNAME --password=$$PASSWORD'] secretEnv: ['USERNAME', 'PASSWORD'] - name: "gcr.io/cloud-builders/docker" entrypoint: 'bash' args: ['-c', 'docker run $$USERNAME/REPOSITORY:TAG'] secretEnv: ['USERNAME'] availableSecrets: secretManager: - versionName: projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION env: 'PASSWORD' - versionName: projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION env: 'USERNAME'
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker login --username=$$USERNAME --password=$$PASSWORD" ], "secretEnv": [ "USERNAME", "PASSWORD" ] }, { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker run $$USERNAME/REPOSITORY:TAG" ], "secretEnv": [ "USERNAME" ] } ], "availableSecrets": { "secretManager": [{ "versionName": "projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION", "env": "PASSWORD" }, { "versionName": "projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION", "env": "USERNAME" }] } }
Sostituisci i valori segnaposto nei comandi riportati sopra con quanto segue:
PROJECT_ID
: l'ID del progetto Google Cloud in cui hai archiviato i secret.DOCKER_USERNAME_SECRET_NAME
: il nome del secret corrispondente al nome utente Docker.DOCKER_USERNAME_SECRET_VERSION
: la versione del secret del tuo nome utente Docker.DOCKER_PASSWORD_SECRET_NAME
: il nome del secret corrispondente alla password Docker.DOCKER_PASSWORD_SECRET_VERSION
: la versione del secret della password Docker.REPOSITORY
: il nome del repository Docker da dove esegui il pull dell'immagine.TAG
: il nome tag della tua immagine.
- Dopo tutta la build
Utilizza il file di configurazione della build per avviare manualmente una build o per automatizzare le build utilizzando i trigger.
Push delle immagini a Docker Hub
Per eseguire il push di immagini pubbliche e private in Docker Hub:
Assicurati di aver archiviato le credenziali Docker in Secret Manager e concesso a Cloud Build le autorizzazioni per accedere al secret.
Nel file di configurazione della build:
- Dopo tutta la build
steps
, aggiungi un campoavailableSecrets
che specifichi la versione del secret e la variabile env per il nome utente e la password Docker. - Nel passaggio relativo alla build, in cui vuoi specificare il nome utente e la password:
- Aggiungi un campo
entrypoint
che punta abash
per utilizzare lo strumento bash nel passaggio di creazione. È obbligatorio per fare riferimento alla variabile di ambiente per il secret. - Aggiungi un campo
secretEnv
specificando la variabile di ambiente per nome utente e password. - Nel campo
args
, aggiungi un flag-c
come primo argomento. Qualsiasi stringa passata dopo-c
viene trattata come un comando. Per saperne di più sull'esecuzione dei comandi Bash con -c, consulta la documentazione di Bash. - Quando specifichi il secret nel campo
args
, specificalo utilizzando la variabile di ambiente con prefisso$$
.
- Aggiungi un campo
Il seguente file di configurazione della build di esempio mostra come accedere a Docker, creare un'immagine con codice sorgente archiviato localmente ed eseguire il push dell'immagine nel repository Docker.
YAML
steps: - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker login --username=$$USERNAME --password=$$PASSWORD'] secretEnv: ['USERNAME', 'PASSWORD'] - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker build -t $$USERNAME/REPOSITORY:TAG .'] secretEnv: ['USERNAME'] - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: ['-c', 'docker push $$USERNAME/REPOSITORY:TAG'] secretEnv: ['USERNAME'] availableSecrets: secretManager: - versionName: projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION env: 'PASSWORD' - versionName: projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION env: 'USERNAME'
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker login --username=$$USERNAME --password=$$PASSWORD" ], "secretEnv": [ "USERNAME", "PASSWORD" ] }, { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker build -t $$USERNAME/REPOSITORY:TAG ." ], "secretEnv": [ "USERNAME" ] }, { "name": "gcr.io/cloud-builders/docker", "entrypoint": "bash", "args": [ "-c", "docker push $$USERNAME/REPOSITORY:TAG" ], "secretEnv": [ "USERNAME" ] } ], "availableSecrets": { "secretManager": [{ "versionName": "projects/PROJECT_ID/secrets/DOCKER_PASSWORD_SECRET_NAME/versions/DOCKER_PASSWORD_SECRET_VERSION", "env": "PASSWORD" }, { "versionName": "projects/PROJECT_ID/secrets/DOCKER_USERNAME_SECRET_NAME/versions/DOCKER_USERNAME_SECRET_VERSION", "env": "USERNAME" }] } }
Sostituisci i valori segnaposto nei comandi riportati sopra con quanto segue:
PROJECT_ID
: l'ID del progetto Google Cloud in cui hai archiviato i secret.DOCKER_USERNAME_SECRET_NAME
: il nome del secret corrispondente al nome utente Docker.DOCKER_USERNAME_SECRET_VERSION
: la versione del secret del tuo nome utente Docker.DOCKER_PASSWORD_SECRET_NAME
: il nome del secret corrispondente alla password Docker.DOCKER_PASSWORD_SECRET_VERSION
: la versione del secret della password Docker.REPOSITORY
: il nome del repository Docker su cui stai eseguendo il push dell'immagine.TAG
: il nome tag della tua immagine.
- Dopo tutta la build
Utilizza il file di configurazione della build per avviare manualmente una build o per automatizzare le build utilizzando i trigger.
Utilizzo delle versioni client Docker
Il generatore di Docker supportato per Cloud Build, gcr.io/cloud-builders/docker
utilizza Docker 20.10.14. Con questa versione, se non specifichi un tag durante il push di un'immagine a Docker, Docker esegue il push solo dell'immagine con il tag latest
.
Se il tag latest
non esiste, il push non riesce.
Per eseguire il push di un'immagine con un tag specifico in Docker, specifica il tag nel passaggio di build docker push
. Il seguente esempio esegue il push di un'immagine taggata prod
:
YAML
steps:
...
- name: 'gcr.io/cloud-builders/docker'
args: ['docker', 'push', '$$USERNAME/myrepo:prod']
...
JSON
{
...
{
"name": "gcr.io/cloud-builders/docker",
"args": [
"docker",
"push",
"$$USERNAME/myrepo:prod"
],
}
...
}
Per eseguire il push di tutti i tag di un'immagine in Docker, aggiungi il flag -a
all'elenco di argomenti nel passaggio di build docker push
:
YAML
steps:
...
- name: 'gcr.io/cloud-builders/docker'
args: ['docker', 'push', '-a', '$$USERNAME/myrepo']
...
JSON
{
...
{
"name": "gcr.io/cloud-builders/docker",
"args": [
"docker",
"push",
"-a",
"$$USERNAME/myrepo"
],
}
...
}
Puoi utilizzare il client Docker 19.03.9 taggando la versione nel generatore Docker:
YAML
steps:
...
- name: 'gcr.io/cloud-builders/docker:19.03.9'
args: ['docker', 'push', '$$USERNAME/myrepo:prod']
...
JSON
{
...
{
"name": "gcr.io/cloud-builders/docker:19.03.9",
"args": [
"docker",
"push",
"$$USERNAME/myrepo:prod"
],
}
...
}
Passaggi successivi
- Scopri come scrivere un file di configurazione di compilazione di base.
- Scopri come eseguire le build manualmente o automatizzare utilizzando i trigger di build.