Questa pagina spiega come utilizzare le associazioni di payload e applicare le espansioni dei parametri bash alle variabili di sostituzione associate al trigger di build. Se non hai familiarità con l'utilizzo delle variabili di sostituzione nella configurazione della build, consulta Sostituzione dei valori delle variabili.
Cloud Build consente di archiviare parti del payload dell'evento del trigger come variabile di sostituzione. Il payload di un evento è il corpo dell'evento che richiama un trigger. Le variabili associate a un payload sono chiamate binding e sono disponibili per le build richiamate da eventi push e pull. I binding ti consentono di accedere a dati aggiuntivi relativi alla tua build, come la lingua associata al codice sorgente e l'autore di una richiesta di pull.
Cloud Build consente inoltre agli utenti di applicare le espansioni dei parametri bash ai valori delle variabili di sostituzione. Le espansioni dei parametri bash ti consentono di manipolare le stringhe associate alle variabili esistenti. Puoi manipolare le stringhe mettendo le lettere in maiuscolo o sostituendo una sottostringa.
Puoi utilizzare le associazioni di payload e applicare le espansioni dei parametri bash quando definisci o aggiorni un trigger di build nella console Google Cloud e in un file di configurazione Cloud Build. Inoltre, puoi applicare le espansioni dei parametri bash quando esegui build manuali.
Associazioni di payload
Puoi memorizzare parti del payload dell'evento del trigger come valore di una variabile di sostituzione. I binding del payload sono disponibili come valori delle variabili per le build richiamate da eventi push e pull e possono essere utilizzati per accedere al payload JSON quando il codice sorgente si trova in repository GitHub o Cloud Source Repositories. Per scoprire di più sui payload degli eventi GitHub, consulta Payload degli eventi webhook. Per saperne di più sui payload degli eventi per Cloud Source Repositories, consulta Notifiche per Cloud Source Repositories.
Puoi accedere alle informazioni da un payload dell'evento utilizzando un prefisso designato, che rappresenta la radice del payload dell'evento. A partire dal prefisso, puoi utilizzare la sintassi JSONPath per accedere al payload ed estrarre i dati. A seconda del tipo di evento, sono disponibili i seguenti prefissi del payload:
| Prefisso | Origine | Descrizione |
|---|---|---|
push |
GitHub | Consente di accedere ai campi all'interno del payload JSON per gli eventi push |
pull_request |
GitHub | Consente di accedere ai campi all'interno del payload JSON per gli eventi di richiesta di pull |
issue_comment |
GitHub | Consente di accedere ai campi all'interno del payload JSON per gli eventi di commento ai problemi associati a una richiesta di pull |
csr |
Cloud Source Repositories | Consente di accedere ai campi all'interno del payload JSON per gli eventi push |
Per qualsiasi evento associato all'app GitHub, sono disponibili anche i valori delle variabili integrate is_collaborator e perm_level. Lo stato dell'utente
viene controllato per gli eventi push e pull in base ai valori delle variabili push.pusher.name,
pull_request.pull_request.user.login e issue_comment.comment.user.login.
La tabella seguente mostra come includerli come valori delle variabili per il
trigger quando il codice sorgente si trova in GitHub:
| Nome variabile | Valore variabile | Descrizione variabile |
|---|---|---|
_PERM_LEVEL |
$(perm_level) |
Ottiene il livello di autorizzazione dell'utente |
_IS_COLLABORATOR |
$(is_collaborator) |
Restituisce true se l'utente è un collaboratore |
Puoi utilizzare i valori delle variabili is_collaborator e perm_level per gli eventi push, gli eventi richiesta di pull e gli eventi richiesta di pull controllati da un commento. Non devi
precedere questi valori di variabile con un prefisso.
Creazione di sostituzioni utilizzando le associazioni di payload
Per creare una variabile di sostituzione che utilizza un'associazione di payload:
Apri la pagina Trigger.
Se non hai creato un trigger di build, fai clic su Crea trigger. In caso contrario, seleziona un trigger esistente.
Nella sezione Variabili di sostituzione, fai clic su Aggiungi variabile.
Aggiungi un nome alla variabile seguendo la convenzione descritta di seguito:
Le sostituzioni devono iniziare con un trattino basso (
_) e utilizzare solo lettere maiuscole e numeri (rispettando l'espressione regolare[A-Z0-9_]+). In questo modo si evitano conflitti con le sostituzioni integrate.Il numero di parametri è limitato a 100. La lunghezza di una chiave parametro è limitata a 100 byte e la lunghezza di un valore parametro è limitata a 4000 byte.
Per scoprire di più su come definire e utilizzare le sostituzioni definite dall'utente, vedi Utilizzare le sostituzioni definite dall'utente.
Aggiungi un valore per la variabile utilizzando un prefisso supportato.
Se il codice sorgente si trova in GitHub, puoi fare riferimento alle informazioni nel payload dell'evento all'interno delle variabili di sostituzione utilizzando i binding del payload. Per accedere al payload JSON di un evento push, utilizza il prefisso
pushobody. Nell'esempio seguente, il prefissopushnel valore della variabile viene utilizzato come punto di accesso per accedere alle informazioni dal payload JSON della build:Nome variabile Valore variabile Descrizione variabile _PUSH_NAME$(push.repository.name)Ottiene il nome del repository associato all'evento push _COMMITS$(push.commits)Ottiene l'array di oggetti commit che descrivono ogni commit eseguito con push _OWNER$(push.repository.owner.name)Ottiene il nome del proprietario del repository _URL$(push.repository.html_url)Ottiene l'URL del tuo repository GitHub _LANGUAGE$(push.repository.language)Ottiene la lingua del codice sorgente incluso nel push Per un elenco dei campi a cui puoi accedere utilizzando il prefisso
push, consultaPushEvent.Per accedere al payload JSON di un evento richiesta di pull, utilizza il prefisso
pull_requestobody. Nell'esempio seguente, il prefissopull_requestnel valore della variabile viene utilizzato come punto di accesso per accedere alle informazioni dal payload JSON della build:Nome variabile Valore variabile Descrizione variabile _PULL_REQUEST_ID$(pull_request.pull_request.id)Ottiene l'ID della richiesta di pull _PULL_REQUEST_TITLE$(pull_request.pull_request.title)Ottiene il titolo della richiesta di pull _PULL_REQUEST_BODY$(pull_request.pull_request.body)Ottiene il corpo della richiesta di pull _USERNAME$(pull_request.pull_request.user.login)Ottiene il nome utente del mittente della richiesta di pull _MERGE_TIME$(pull_request.pull_request.merged_at)Ottiene l'ora in cui è stata unita la richiesta di pull Per un elenco dei campi a cui puoi accedere utilizzando il prefisso
pull_request, consultaPullRequestEvent.Per accedere al payload JSON di un evento di commit, utilizza il prefisso
commit. Nell'esempio seguente, il prefissocommitnel valore della variabile viene utilizzato come punto di accesso per accedere alle informazioni dal payload JSON della build:Nome variabile Valore variabile Descrizione variabile _COMMIT_URL$(commit.url)Ottiene l'URL associato al commit _COMMIT_USER$(commit.author.login)Ottiene il nome utente dell'autore del commit _COMMIT_MESSAGE$(commit.commit.message)Ottiene il messaggio di commit associato al commit _COMMIT_DATE$(commit.commit.committer.date)Ottiene la data associata al commit _COMMIT_ADDITIONS$(commit.files['*'].additions)Ottiene il numero di aggiunte associate ai file nel commit Per un elenco dei campi a cui puoi accedere utilizzando il prefisso
commit, consulta Ottenere un commit.Se attivi il controllo dei commenti per un trigger richiamato da una richiesta pull, l'evento che richiama il trigger è invece un
IssueCommentEvente il prefisso associato èissue_comment. Negli esempi seguenti, il prefissoissue_commentnel valore della variabile viene utilizzato come punto di accesso per accedere alle informazioni dal payload JSON della build:Nome variabile Valore variabile Descrizione variabile _PULL_REQUEST_ID$(issue_comment.issue.id)Ottiene l'ID della richiesta di pull _PULL_REQUEST_TITLE$(issue_comment.issue.title)Ottiene il titolo della richiesta di pull _STATE$(issue_comment.state)Ottiene lo stato della richiesta di pull (ad es. aperta, chiusa e così via). _LABELS$(issue_comment.issue.labels)Ottiene l'elenco delle etichette associate alla richiesta di pull _LABELS_URL$(issue_comment.issue.labels[?(@.description=="Extra attention is needed")].url)Ottiene l'URL associato all'etichetta corrispondente alla descrizione Per un elenco dei campi a cui puoi accedere utilizzando il prefisso
issue_comment, consultaIssueCommentEvent.Se il codice sorgente si trova in Cloud Source Repositories, puoi fare riferimento alle informazioni nel payload dell'evento all'interno delle variabili di sostituzione utilizzando i binding del payload. Per accedere al payload JSON da un evento push, utilizza il prefisso
csrobody. Nell'esempio seguente, il prefissocsrnel valore della variabile viene utilizzato come punto di accesso per accedere alle informazioni dal payload JSON della build.Nome variabile Valore variabile Descrizione variabile _REPO_NAME$(csr.name)Ottiene il nome del tuo repository _REPO_URL$(csr.url)Ottiene l'URL del repository _CREATED_REPO$(csr.createRepoEvent)Indica se un utente ha creato un repository _REF_EVENT_NAME$(csr.refUpdateEvent.refUpdates['*'].refName)Il nome del riferimento (ad es. "refs/heads/primary-branch") Per visualizzare altri campi a cui puoi accedere in Cloud Source Repositories, consulta Dati di notifica.
Espansioni dei parametri bash
Puoi applicare le espansioni dei parametri bash alle variabili predefinite e alle variabili definite dall'utente. Esempi di operazioni supportate includono la sostituzione di sottostringhe, la suddivisione di stringhe e l'uso delle maiuscole. Ad esempio, potresti voler sostituire una sottostringa in una variabile predefinita e utilizzare la variabile come tag immagine.
Le espansioni di parametri bash che puoi specificare per le variabili di sostituzione sono le seguenti:
| Espansioni di Bash | Descrizione |
|---|---|
${var} |
Espande il valore della stringa memorizzato in var |
${var^} |
Mette in maiuscolo il primo carattere della stringa |
${var^^} |
Converte in maiuscolo tutti i caratteri della stringa |
${var,} |
Converte in minuscolo il primo carattere della stringa |
${var,,} |
Converte tutti i caratteri della stringa in minuscolo |
${var:position} |
Rimuove i primi position caratteri dalla stringa |
${var:position:length} |
Suddivide la stringa a partire dal valore numerico specificato in position e include fino al valore numerico specificato in length |
${var/substring/replacement} |
Sostituisce l'istanza più a sinistra del valore specificato in substring con il valore specificato in replacement |
${var//substring/replacement} |
Sostituisce tutte le istanze del valore specificato in substring con il valore specificato in replacement |
${var/#substring/replacement} |
Sostituisce la prima occorrenza del valore specificato in substring con il valore specificato in replacement solo se substring è un prefisso di var |
${var/%substring/replacement} |
Sostituisce l'ultima istanza del valore specificato in substring con il valore specificato in replacement solo se substring è un suffisso di var |
${#var} |
Recupera la lunghezza della stringa |
${var:-default} |
Valuta var come default, a meno che var non sia già definito |
Puoi anche specificare pattern da abbinare per le seguenti espansioni dei parametri bash:
| Espansioni di Bash | Descrizione |
|---|---|
${var#pattern} |
Rimuove i caratteri dal lato sinistro di una stringa fino all'istanza più a sinistra di pattern inclusa. |
${var##pattern} |
Rimuove i caratteri dal lato sinistro di una stringa fino all'ultima istanza del pattern specificato inclusa. |
${var%pattern} |
Rimuove i caratteri dal lato destro di una stringa fino alla prima istanza di pattern specificata inclusa. |
${var%%pattern} |
Rimuove i caratteri dal lato destro di una stringa fino all'istanza più a sinistra di pattern specificato inclusa. |
I pattern che puoi specificare includono:
| Pattern | Descrizione |
|---|---|
* |
Corrisponde a zero o più caratteri alfanumerici |
? |
Corrisponde a qualsiasi singolo carattere alfanumerico |
[ccc] |
Corrisponde a qualsiasi singolo carattere in ccc, inclusi gli intervalli tra a-z o 0-9 |
[^c] |
Trova qualsiasi carattere alfanumerico non presente in c, inclusa una gamma di caratteri in cui lo <= c <= hi |
c |
Corrisponde a qualsiasi carattere alfanumerico c |
\c |
Corrisponde a qualsiasi carattere c, inclusi i caratteri non alfanumerici come *, ? o \ |
Applicazione delle espansioni dei parametri bash
Per applicare un'espansione di parametri bash a una variabile di sostituzione integrata o definita dall'utente:
Apri la pagina Trigger.
Se non hai creato un trigger di build, fai clic su Crea trigger. In caso contrario, seleziona un trigger esistente.
Nella sezione Variabili di sostituzione, fai clic su Aggiungi variabile.
Aggiungi un nome alla variabile seguendo la convenzione descritta di seguito:
Le sostituzioni devono iniziare con un trattino basso (
_) e utilizzare solo lettere maiuscole e numeri (rispettando l'espressione regolare[A-Z0-9_]+). In questo modo si evitano conflitti con le sostituzioni integrate.Il numero di parametri è limitato a 100. La lunghezza di una chiave parametro è limitata a 100 byte e la lunghezza di un valore parametro è limitata a 4000 byte.
Per scoprire di più su come definire e utilizzare le sostituzioni definite dall'utente, vedi Utilizzare le sostituzioni definite dall'utente.
Aggiungi un valore per la variabile, applicando un'espansione dei parametri bash supportata a una variabile di sostituzione integrata o a un'altra variabile di sostituzione definita dall'utente.
Nell'esempio seguente, la variabile di sostituzione integrata
$BRANCH_NAMEha un valore predefinito diFeature_Secret_Project_#v2. La tabella seguente mostra esempi di espansioni dei parametri bash che puoi applicare a$BRANCH_NAME:Nome variabile Espansione di Bash Valore variabile Descrizione _BRANCH_LOWERCASE${$BRANCH_NAME,,}feature_secret_project_#v2converte tutti i caratteri della stringa in minuscolo _BRANCH_NO_SUFFIX${_BRANCH_LOWERCASE%_\#v2}feature_secret_projectelimina tutti i caratteri dal lato destro della stringa che corrispondono al pattern specificato _BRANCH_NO_PREFIX${_BRANCH_NO_SUFFIX#*_}secret_projectelimina tutti i caratteri fino al primo carattere di sottolineatura _BRANCH_FOR_IMAGE_NAME${_BRANCH_NO_PREFIX//_/-}secret-projectsostituisce tutti i trattini bassi con un trattino _IMAGE_NAMEmy-app-${_BRANCH_FOR_IMAGE_NAME}-prodmy-app-secret-project-prodcostruisce il nome dell'immagine utilizzando la variabile _BRANCH_FOR_IMAGE_NAMEdefinita sopraSupponiamo che
_IMAGE_NAMEsia definito nel trigger come il valore specificato nella tabella precedente,my-app-secret-project-prod. Questo valore ora sostituirà qualsiasi definizione di_IMAGE_NAMEnel file di configurazione della build. Nell'esempio seguente, il valore della variabile specificato per_IMAGE_NAME(my-app-secret-project-prod) sostituisce il valore predefinito di_IMAGE_NAME(test-image) quando viene richiamato il trigger di build.YAML
steps: - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'gcr.io/$PROJECT_ID/${_IMAGE_NAME}', '.'] substitutions: _IMAGE_NAME: test-image #default value images: [ 'gcr.io/$PROJECT_ID/${_IMAGE_NAME}' ] options: dynamicSubstitutions: trueJSON
{ 'steps': [ { 'name': 'gcr.io/cloud-builders/docker', 'args': [ 'build', '-t', 'gcr.io/$PROJECT_ID/${_IMAGE_NAME}', '.' ] } ], 'substitutions': { '_IMAGE_NAME': 'test-image' #default value }, 'images': [ 'gcr.io/$PROJECT_ID/${_IMAGE_NAME}' ], "options": { "dynamic_substitutions": true } }
Il campo dynamicSubstitutions, impostato su true nell'esempio precedente, consente
l'interpretazione delle espansioni dei parametri bash. Se la build viene richiamata da un
trigger, il campo dynamicSubstitutions è sempre impostato su true e non
deve essere specificato nel file di configurazione della build. Se la build viene richiamata manualmente, devi impostare il campo dynamicSubstitutions su true affinché le espansioni dei parametri bash vengano interpretate durante l'esecuzione della build.
Utilizzo delle espansioni di parametri bash con le associazioni di payload
Puoi applicare le espansioni dei parametri bash alle variabili associate alle associazioni di payload creando una nuova variabile per fare riferimento alla variabile contenente l'associazione o concatenando le associazioni con le espansioni dei parametri bash. La seguente tabella elenca esempi di come puoi utilizzare l'espansione dei parametri bash con le associazioni di payload:
| Nome variabile | Valore variabile | Descrizione variabile |
|---|---|---|
_URL |
$(push.repository.html_url) |
Ottiene l'URL del repository |
_URL_CAPITAL |
${_URL^^} |
Utilizza un'espansione di parametri bash per mettere in maiuscolo tutti i caratteri dell'URL |
_APP_NAME |
my-app-${_URL_CAPITAL} |
Aggiunge un prefisso all'URL in maiuscolo del repository |
APP_NAME_ID |
my-app-$(push.repository.html_url)-${_PAYLOAD_ID:0:7} |
Crea un nome dell'applicazione che include l'URL del repository e i primi sette caratteri dell'ID payload |
Passaggi successivi
- Scopri come sostituire i valori delle variabili.
- Scopri come creare un file di configurazione della compilazione di base.
- Scopri come creare e gestire i trigger di build.
- Scopri come eseguire le build manualmente.