pipelinectl
pipelinectl è un archivio chiave-valore leggero che è possibile utilizzare nelle DevSecOps pipeline per condividere dati tra attività e script di automazione della conformità.
Per ulteriori informazioni su dove viene utilizzato questo strumento, vedi Aggiunta dei passi di test e di build alle pipeline.
Cloud Object Storage configurazione dei dati della pipeline
Cloud Object Storage (COS) offre uno spazio di archiviazione illimitato e permanente per i dati della pipeline, quali artefatti di compilazione, rapporti di test e file intermedi. A differenza dell'archivio locale predefinito, i file archiviati su COS rimangono disponibili anche dopo l'esecuzione delle pipeline e possono essere condivisi tra diverse pipeline.
pipelinectl I comandi che supportano i bucket COS come archiviazione persistente esplicita sono:
Il bucket COS deve essere separato dal bucket dell'archivio delle prove per motivi di audit e conformità.
Configurare il COS per i dati della pipeline
Per utilizzare COS con le operazioni sui file di pipelinectl, seguire questi passaggi di configurazione:
- Crea un bucket di dati
- È possibile utilizzare un'istanza esistente di Cloud Object Storage oppure crearne una nuova. Seguire le istruzioni riportate nella sezione " Configurazione di Cloud Object Storage " per:
- Crea un bucket di dati (deve essere distinto dal bucket dell'archivio delle prove)
- Crea delle credenziali di servizio per il bucket
- Configurare le autorizzazioni IAM
Assegna i seguenti ruoli alle credenziali di servizio per il bucket di dati: Writer, Object Writer, Reader e Content Reader.
Per istruzioni dettagliate, consultare la sezione " Autorizzazioni di accesso ai bucket ".
- Configurare le proprietà dell'ambiente
Aggiungi le seguenti proprietà di ambiente alla tua pipeline di DevSecOps:
| Proprietà | Immettere | Valore | Descrizione |
|---|---|---|---|
data-cos-api-key |
Sicuro | La tua chiave API COS | Chiave API dalle credenziali del servizio |
data-cos-bucket-name |
Testo | Il nome del tuo secchio | Nome del tuo bucket di dati |
data-cos-endpoint |
Testo | Endpoint COS URL | Endpoint per la regione del tuo bucket |
Per trovare l'endpoint COS URL, vai alla pagina Configurazione del tuo bucket e copia l'endpoint relativo alla regione del tuo bucket (ad esempio, s3.us-south.cloud-object-storage.appdomain.cloud). Quando possibile,
utilizza l'endpoint diretto o privato per garantire prestazioni e sicurezza migliori.
Salva la chiave API come proprietà protetta per salvaguardare le credenziali sensibili.
- Configura il ciclo di vita del bucket (consigliato)
Imposta una politica relativa al ciclo di vita per eliminare automaticamente i dati obsoleti della pipeline. Per la maggior parte dei dati delle condutture si raccomanda di applicare una regola di scadenza di 7 giorni. Per le istruzioni, consultare le politiche sul ciclo di vita.
Comprendere l'ambito dei dati COS
A differenza dei comandi save_result e set_env, il cui ambito è limitato automaticamente alle singole esecuzioni della pipeline, le operazioni sui file che utilizzano il backend COS (--storage=cos) vengono
eseguite su un bucket condiviso che rimane attivo per tutte le esecuzioni della pipeline.
Comportamenti chiave:
Nessun isolamento automatico delle esecuzioni: i file salvati con la stessa chiave da diverse esecuzioni della pipeline si sovrascrivono a vicenda.
Spazio dei nomi del bucket condiviso: tutte le esecuzioni della pipeline che utilizzano la stessa configurazione COS condividono lo stesso spazio dei nomi del bucket.
Archiviazione permanente: i file rimangono in COS fino a quando non vengono esplicitamente eliminati o non scadono in base alle regole del ciclo di vita del bucket.
Confronto delle caratteristiche tecniche:
| Comando | Ambito | Persistenza |
|---|---|---|
save_result |
Percorso unico della conduttura | Specifico per la corsa |
set_env |
Percorso unico della conduttura | Specifico per la corsa |
save_file (locale) |
Percorso unico della conduttura | Specifico per la corsa |
save_file --storage=cos |
Condiviso tra tutte le esecuzioni | Perseverante |
Quando si utilizza il comando list_files --storage=cos``, vengono restituiti TUTTI i file presenti nel bucket configurato, non solo quelli relativi all'esecuzione corrente della pipeline. Utilizza il filtro per prefisso per restringere
i risultati.
Migliori pratiche per le operazioni sui file COS
Segui queste linee guida per organizzare e gestire i file in modo efficace in Cloud Object Storage ed evitare la sovrascrittura involontaria dei dati.
Come evitare i conflitti
Per evitare la sovrascrittura dei dati e i conflitti:
- Includere identificatori univoci nelle chiavi (ad esempio, ID dell'esecuzione della pipeline, data e ora)
- Utilizza modelli di chiavi gerarchiche:
project/component/run-id/filename - Evita chiavi generiche come
build-artifactsenza qualificatori
Esempio di conflitto:
# Pipeline Run 1
save_file --storage=cos build-artifact ./dist/app-v1.0.0.tar.gz
# Pipeline Run 2 (overwrites Run 1's file!)
save_file --storage=cos build-artifact ./dist/app-v2.0.0.tar.gz
Esempio di utilizzo sicuro:
# Pipeline Run 1
save_file --storage=cos "build-artifact-${PIPELINE_RUN_ID}" ./dist/app-v1.0.0.tar.gz
# Pipeline Run 2 (separate key, no conflict)
save_file --storage=cos "build-artifact-${PIPELINE_RUN_ID}" ./dist/app-v2.0.0.tar.gz
Convenzioni di denominazione principali
Utilizzare modelli gerarchici
Organizza i file utilizzando nomi chiave descrittivi e gerarchici:
# Good: Organized, descriptive
save_file --storage=cos "artifacts/build/${PIPELINE_RUN_ID}/app.tar.gz" ./dist/app.tar.gz
save_file --storage=cos "reports/security/${BUILD_NUMBER}/scan.json" ./scan-results.json
# Avoid: Flat, generic
save_file --storage=cos "artifact" ./dist/app.tar.gz
Includere identificatori univoci
Utilizza le variabili per rendere le chiavi univoche per ogni esecuzione della pipeline:
- ID della sequenza di pipeline:
${PIPELINE_RUN_ID} - Numero di build:
${BUILD_NUMBER} - Data/ora:
$(date +%Y%m%d-%H%M%S) - Git SHA del commit:
${GIT_COMMIT}
Usa nomi descrittivi
Scegli nomi chiari e significativi che indichino lo scopo del file:
# Good: Clear purpose
save_file --storage=cos "ui-service-image-${VERSION}" ./image.tar
# Avoid: Ambiguous
save_file --storage=cos "img" ./image.tar
Evitare i prefissi riservati
NON utilizzare chiavi che iniziano con devsecops-pipeline-data/ (ad esempio, devsecops-pipeline-data/path/to/file). Il prefisso devsecops-pipeline-data/ è riservato alle operazioni interne della pipeline.
L'uso di prefissi riservati può causare il danneggiamento dei dati o il malfunzionamento della pipeline.
Filtraggio e recupero
Utilizza il filtro basato sui prefissi per restringere i risultati durante l'elenco dei file:
# List all artifacts for a specific project
list_files --storage=cos "myproject/artifacts/"
# List security reports for a specific date
list_files --storage=cos "reports/security/2024-01-15"
Rimuovere esplicitamente i file temporanei
Quando i file non servono più, eliminali in modo esplicito:
remove_file --storage=cos "temp/build-${PIPELINE_RUN_ID}/cache.tar"
Considerazioni sulla sicurezza
- Gestione delle chiavi API: conservare sempre la chiave API (
data-cos-api-key) come proprietà protetta. Non inserire mai le chiavi API in modo statico negli script o nei file di configurazione. - Principio del privilegio minimo: concedere solo le autorizzazioni IAM minime necessarie elencate sopra.
- Separazione dei bucket: utilizzare un bucket dedicato ai dati della pipeline, separato dal bucket dell'archivio delle prove.
Utilizzo
pipelinectl fornisce un singolo binario. Il suo funzionamento dipende dal nome (come in busybox). Quando viene richiamato come pipelinectl,
il programma deve essere fornito come primo argomento, ad esempio pipelinectl get_data.
Alias e metodi disponibili:
- imposta_var_env
- imposta_envc
- get_env
- elenco_env
- imposta_segreto
- recupera_segreto
- elenco_segreti
- rimuovi_segreto
- file_salvataggio
- file_caricamento
- elenco_file
- rimuovi_file
- salva repository
- elenco_repository
- repository caricamento
- Risultato salvataggio
- elenco_risultati
- risultato_caricamento
- salva_risorsa
- elenco_risorse
- arte_caricamento
- dati_input
- recupera_dati
- serializzare
- deserializzare
- salva_asset
- asset_caricamento
- salva_prova
- carica_prova
- eliminazione_prove
imposta_var_env
# <key>: The name of the environment variable e.g. pipeline-namespace, app-name
# <value>: Value of the key
set_env <key> # reads <value> from `stdin`
set_env <key> <value>
Salva una stringa arbitraria che può essere recuperata in seguito con get_env.
Se <value> l'argomento manca, lo set_env legge dall'input standard. set_env Supporta anche il passaggio di più coppie chiave-valore da impostare contemporaneamente.
Esempio:
# set value provided as argument
set_env app-name "my-app-name"
# set value provided via stdin
echo "my-app-name" | set_env app-name
set_env my-api-key < /config/my-api-key
# set multiple key value pairs
set_env key-1 "value-1" \
key-2 "value-2" \
key-n "value-n"
imposta_envc
# <key>: The name of the environment variable e.g. pipeline-namespace, app-name
# <value>: Value of the key
set_envc <key> # reads <value> from `stdin`
set_envc <key> <value>
Salva una stringa arbitraria immutabile che può essere recuperata in seguito con get_env. Una volta salvato con set_envc, non può essere modificato da ulteriori chiamate set_env set_envc /.
Se <value> l'argomento manca, lo set_envc legge dall'input standard. set_envc Supporta anche il passaggio di più coppie chiave-valore da impostare contemporaneamente.
- Una volta impostata con
set_envc, la chiave non può essere sovrascritta con ulteriori invocazioni diset_envcoset_env. - Le variabili già impostate con set_env non possono essere sovrascritte con
set_envc.
Esempio:
# set value provided as argument
set_envc app-name "my-app-name"
# set value provided via stdin
echo "my-app-name" | set_envc app-name
set_envc my-api-key < /config/my-api-key
# set multiple key value pairs
set_envc key-1 "value-1" \
key-2 "value-2" \
key-n "value-n"
Get_env
# <key>: The name of the environment variable e.g. pipeline-namespace, app-name
get_env <key> [default]
Stampare il valore di configurazione memorizzato (in questo ordine):
- Se
set_envè stato utilizzato precedentemente conkey, richiama tale valore - Tenta di leggere il file
$CONFIG_DIR/$key(CONFIG_DIRassume il valore predefinito/config) - Stampa il valore predefinito specificato (se presente)
- Stampa un messaggio di errore e restituisce un codice di uscita diverso da zero
Esempio:
get_env app-name "default-app-name"
elenco_env
list_env
Visualizza le chiavi e le variabili d'ambiente salvate dal processo 'set_env.
Esempio:
list_env
imposta_segreto
# <key>: The name of the secret e.g. artifactory-token, (short-lived) iam-token
# <value>: Value of the secret
set_secret <key> # reads <value> from `stdin`
set_secret <key> <value>
Salva un segreto che può essere recuperato in seguito con get_secret.
Se manca l'argomento <value>, set_secret lo legge dallo standard input.
- Il contenuto impostato da
set_secretnon viene serializzato, quindi non sarà disponibile tra le sub-pipeline / async pipelineruns. - Disattiva la registrazione di debug relativa all'esecuzione di questo comando, per garantire che il contenuto del segreto salvato non compaia nemmeno nei log di debug.
- Assicurarsi che gli script e la logica non dipendano da alcun output di
set_secret(c'è un'istruzione di stampa per mascherare il valore segreto utilizzando la funzionalità ::add-mask::)
Esempio:
# set value provided as argument
set_secret my-secret-key "my-secret-content"
# set value provided via stdin
echo "my-secret-content" | set_secret my-secret
set_secret my-api-key < /config/my-api-key
# set multiple key value pairs
set_secret secret-key-1 "value-1" \
secret-key-2 "value-2" \
secret-key-n "value-n"
recupera_segreto
# <key>: The name of the secret set with set_secret or set as Secure Value in pipeline UI
get_secret <key> [default]
Recuperare il valore segreto memorizzato (in questo ordine):
- Se
set_secretè stato utilizzato precedentemente conkey, richiama tale valore - Tenta di leggere il file
$SECRET_CONFIG_DIR/$key(SECRET_CONFIG_DIRassume il valore predefinito/config/secure-properties) - Stampa il valore predefinito specificato (se presente)
- Stampa un messaggio di errore e restituisce un codice di uscita diverso da zero
Esempio:
get_secret cookie-token "default-token"
get_secret specific-account-ibmcloud-api-key "$(get_secret ibmcloud-api-key "")"
Metti sempre tra virgolette le variabili che contengono valori riservati
Quando si memorizza un valore segreto in una variabile della shell e poi si utilizza tale variabile, è necessario racchiuderla sempre tra virgolette doppie. Senza virgolette, la shell può suddividere il valore in più parole prima di passarlo a un comando.
Non utilizzare variabili senza virgolette contenenti valori riservati.
export API_KEY=$(get_secret my-api-key)
# Unsafe: a multi-line secret value is not passed intact.
# Parts of the secret may appear unmasked in the pipeline log.
some-cli login --apikey $API_KEY
Citare sempre la variabile per mantenerne intatto il valore.
export API_KEY=$(get_secret my-api-key)
# Safe: the value is passed as a single, intact string.
some-cli login --apikey "$API_KEY"
La stessa regola si applica ovunque venga utilizzata la variabile: negli argomenti dei comandi, nell'interpolazione delle stringhe o quando si scrivono valori su un file.
# Safe
curl -H "Authorization: Bearer $API_KEY" https://example.com/api
echo "$API_KEY" > /tmp/credentials.txt
elenco_segreti
list_secrets
Visualizza le chiavi salvate dal processo set_secret e le variabili d'ambiente di tipo Secure Value nell'interfaccia utente della pipeline.
Esempio:
list_secrets
rimuovi_segreto
remove_secret <key>
Questo comando cancella il segreto memorizzato all'interno del pipelinectl, salvato con set_secret.
file_salvataggio
# <identifier>: Name used to store and retrieve the file (for example, 'build-artifact', 'my-report')
# <path>: Path to the file on the local filesystem (for example, './dist/app.tar.gz')
save_file <identifier> <path>
Salva un file arbitrario che può essere richiamato successivamente con load_file.
Le directory non sono supportate.
Archiviazione locale (impostazione predefinita):
I file vengono salvati nell'area di lavoro della pipeline e sono validi solo per l'esecuzione corrente della pipeline.
save_file some_config ./config.yaml
Archiviazione COS:
I file vengono salvati in Cloud Object Storage e rimangono disponibili anche dopo l'esecuzione della pipeline. Per informazioni importanti sul comportamento dei bucket condivisi, consultare la sezione " Ambito dei dati e persistenza ".
Prerequisiti: assicurarsi che COS sia configurato. Vedi la configurazione di Cloud Object Storage.
# Save with run-specific key
save_file --storage=cos "build-artifact-${PIPELINE_RUN_ID}" ./dist/app-v1.2.3.tar.gz
# Save with hierarchical key
save_file --storage=cos "artifacts/ui-service/${BUILD_NUMBER}/image.tar" ./image.tar
# Save report with timestamp
save_file --storage=cos "reports/security/$(date +%Y%m%d)/scan.json" ./scan-results.json
file_caricamento
# <identifier>: Name of the file to retrieve (for example, 'build-artifact', 'my-report')
load_file <identifier>
Stampa il file salvato in stdout.
Archiviazione locale (impostazione predefinita):
Recupera i file memorizzati nell'area di lavoro della pipeline per l'esecuzione corrente.
load_file some_config > some_config.yaml
Archiviazione COS:
Recupera i file da Cloud Object Storage.
Prerequisiti: assicurarsi che COS sia configurato. Vedi la configurazione di Cloud Object Storage.
# Load file and print to stdout
load_file --storage=cos "build-artifact-${PIPELINE_RUN_ID}"
# Load file and save to local filesystem
load_file --storage=cos "artifacts/ui-service/${BUILD_NUMBER}/image.tar" > ./downloaded-image.tar
elenco_file
Elenca tutti i file salvati tramite save_file, eventualmente filtrati da un prefisso chiave.
# <prefix>: (optional) Filter results to keys starting with this prefix
list_files <prefix>
Stampa l'elenco delle chiavi dei file su stdout.
Archiviazione locale (impostazione predefinita):
Elenca i file memorizzati nell'area di lavoro della pipeline per l'esecuzione corrente.
list_files # lists all saved files
list_files saved-reports- # lists files with "saved-reports-" prefix
Archiviazione COS:
Elenca i file presenti su Cloud Object Storage. Restituisce TUTTI i file presenti nel bucket configurato, non solo quelli relativi all'esecuzione corrente della pipeline. Utilizza il parametro "prefisso" (opzionale) per filtrare i risultati e restringere la ricerca a file specifici.
Prerequisiti: assicurarsi che COS sia configurato. Vedi la configurazione di Cloud Object Storage.
# List all files in bucket (may include files from multiple runs)
list_files --storage=cos
# List files with specific prefix to narrow results
list_files --storage=cos "artifacts/ui-service/"
# List files for specific date
list_files --storage=cos "reports/security/20240115"
rimuovi_file
Elimina un file salvato.
# <identifier>: Name of the file to remove (for example, 'build-artifact', 'my-report')
remove_file <identifier>
Archiviazione locale (impostazione predefinita):
Rimuove i file dall'area di lavoro della pipeline per l'esecuzione corrente.
remove_file my-report
Archiviazione COS:
Elimina i file da Cloud Object Storage.
Prerequisiti: assicurarsi che COS sia configurato. Vedi la configurazione di Cloud Object Storage.
# Remove specific file
remove_file --storage=cos "build-artifact-${PIPELINE_RUN_ID}"
# Remove temporary file
remove_file --storage=cos "temp/cache-${BUILD_NUMBER}.tar"
salva_repository
# <key>: Key of the repository e.g. repository name
# <prop>: Type of the property, e.g. url, branch, commit etc.
# <value>: Value of the property
save_repo <key> [<prop>=<value> ...]
Registra un nuovo repository con la pipeline o ne aggiorna uno esistente.
Proprietà supportate:
urlURL: l' che può essere utilizzato per clonare il repository.path: ubicazione del repository clonato relativo al root del workspace.
Possono essere utilizzati anche altri nomi di proprietà, ma per evitare conflitti di denominazione, devono essere preceduti da un identificativo specifico del servizio, ad esempio invece di utilizzare foo, utilizzare my-service.foo.
Esempio:
save_repo app_ui "url=${REPO_URL}" "path=app_ui_repo"
save_repo app_ui "branch=${REPO_BRANCH}"
save_repo app_ui "commit=${REPO_SHA}"
# any additional property can be added
save_repo app_ui "commit=${REPO_SHA}"
Utilizzo di stdin come origine valore
I valori possono essere forniti da stdin, se si verificano le seguenti condizioni:
- Il contenuto viene trasmesso per il comando
- Una proprietà non ha un valore e
=
Esempio:
command_with_large_output | save_repo app_ui "issues"
# this also works with multiple properties,
# but stdin can provide value for only a single one
command_with_large_output | save_repo app_ui "issues" "result=success" "commit=${REPO_SHA}"
Se con = mancano più valori, il comando termina con un errore, perché non è possibile determinare quale proprietà appartiene al valore in stdin.
Le proprietà senza un valore ma ancora accodando = hanno una stringa vuota come valore.
save_repo app_ui "bar="
load_repo app_ui bar # returns an empty string
repo_elenco
list_repos
Elenca il <key> dei repository memorizzati in stdout.
Esempio:
list_repos
# returns the list of stored repository keys to stdout for example:
# app_ui
# app_repo
carica_repository
# <key>: Key of the repository, e.g. repository name
# <prop>: Name of the property, e.g. commit, branch, url
load_repo <key> [<prop>]
Stampa il valore della proprietà specificata del repository. Elenca tutte le proprietà disponibili per il repository quando viene fornito solo il repository. Restituisce un errore che indica che non sono state trovate proprietà corrispondenti se il repository o la proprietà forniti non sono validi.
Descrizione:
- Visualizza il valore della proprietà specificata del repository, se vengono forniti i valori
e e . - Elenca tutte le proprietà disponibili per il repository quando viene specificato solo l'
. - Restituisce un errore che indica che non sono state trovate proprietà corrispondenti se l'
e fornito non è valido.
Esempio 1: Recupero di una proprietà specifica:
REPO_SHA=$(load_repo app_ui commit)
Esempio 2: Elenco di tutte le proprietà di un determinato repository:
REPO_SHA=$(load_repo app_ui)
Utilizzato con 'list_repos per recuperare i valori delle proprietà
#
# iterate over all repos and print their URLs
#
while read -r key; do
url=$(load_repo $key url)
echo "Repository saved as '$key' is at: '$url'"
done < <(list_repos)
Emette le seguenti linee sulla console:
Quando si recupera una proprietà specifica:
Repository saved as 'my-frontend' is at: 'github.com/my-team/frontend'
Repository saved as 'my-backend' is at: 'github.com/my-team/backend'
Quando si elencano tutte le proprietà di un determinato repository:
Properties available for '$key'.
risultato_salvataggio
# <stage>: Stage name e.g. test, detect-secrets, static-scan
# <path>: Path where will be stored the file, string
save_result <stage> <path>
Salva un test arbitrario, file di risultati della scansione per uno stage. Successivamente, questo file può essere richiamato con load_result. Per impostazione predefinita, i dati vengono salvati con il percorso relativo allo
spazio di lavoro come chiave.
Utilizzando l'indicatore della funzione PIPELINECTL_USE_PATH_AS_KEY, i dati vengono salvati con il percorso fornito come chiave.
Esempio:
#
# save the contents of the file ./results/mocha_results.json
# as an entry named "mocha_results.json" for the "test" stage
#
save_result test ./results/mocha_results.json
#
# save the contents of the file ../data/coverage.xml
# as an entry named "coverage.xml" for the "test" stage
#
save_result test ../data/coverage.xml
#
# Using the `PIPELINECTL_USE_PATH_AS_KEY` environment variable
# save the contents of the file ../data/coverage.xml
# as an entry named "../data/coverage.xml" for the "test" stage
#
PIPELINECTL_USE_PATH_AS_KEY=1 save_result test ../data/coverage.xml
elenco_risultati
# <stage>: Stage name
list_results <stage>
Elenca i nomi file salvati per uno stage.
Esempio:
list_results test
# mocha_results.json
# coverage.xml
risultato_caricamento
# <stage>: Stage name e.g. test, detect-secrets, static-scan
# <file>: File name e.g. mocha_results.json
load_result <stage> <file>
Stampa le chiavi del file salvate in stdout. Per impostazione predefinita, una chiave è il percorso relativo allo spazio di lavoro del percorso file fornito in save_result. Utilizzando l'indicatore della funzione
PIPELINECTL_USE_PATH_AS_KEY, una chiave è il percorso del percorso file fornito in save_result. Per ottenere l'elenco esatto delle chiavi, utilizzare list_results.
Esempio:
load_result test mocha_results.json
#
# Using the `PIPELINECTL_USE_PATH_AS_KEY` environment variable
PIPELINECTL_USE_PATH_AS_KEY=1 load_result test ../data/coverage.xml
Utilizzato insieme a list_results
#
# iterate over all results stored for "test"
# and write them to the filename they were registered with
#
while read -r filename; do
load_result test "$filename" > "./$filename"
done < <(list_results test)
risorsa utente di salvataggio
# <key>: Key of the artifact e.g. app-image, baseimage etc.
# <prop>: Type of property e.g. name, type, tags, signature
# <value>: Value of the property
save_artifact <key> [<prop>=<value> ...]
Registra una nuova risorsa utente di build con la pipeline o ne aggiorna una esistente.
Immagini contenitore
Alcune proprietà suggerite che è possibile utilizzare:
type: può essere qualsiasi tipo di risorsa utente inclusoimage.name: un nome completo per la risorsa utente. Ad esempio, per un'immagine, qualcosa che può essere utilizzato dadocker pull.signature: una firma valida.digest: un digestsha256.source: ad esempio,http://<some-git-url>/blob/<commithash>/<path-to-file>
Tutte le proprietà possono essere impostate in cima a queste proprietà.
Per un'immagine, la proprietà name deve contenere anche la tag dell'immagine.
Esempio:
save_artifact ui_service "name=us.icr.io/team_namespace/ui_service:2.4.3"
save_artifact ui_service "type=image"
# any additional property can be added
save_artifact ui_service "tags=latest,2.4.3,feat-something"
# later, when the image was signed, and we have signature data
save_artifact ui_service "signature=${SIGNATURE}"
Utilizzo di stdin come origine valore
I valori possono essere forniti da stdin, se si verificano le seguenti condizioni:
- Il contenuto viene trasmesso per il comando
- Una proprietà non ha un valore e
=
Esempio:
command_with_large_output | save_artifact ui_service "issues"
# this also works with multiple properties,
# but stdin can provide value for only a single one
command_with_large_output | save_artifact ui_service "issues" "result=success" "signature=${SIGNATURE}"
Se con = mancano più valori, il comando esce con un errore, poiché non è possibile determinare quale proprietà appartiene al valore su stdin.
Le proprietà senza un valore ma ancora accodando = hanno una stringa vuota come valore.
save_artifact ui_service "bar="
load_artifact ui_service bar # returns an empty string
elenco_manufatti
list_artifacts
Elenca il <key> delle risorse utente memorizzate in stdout.
Esempio:
list_artifacts
# returns the list of stored artifact keys to stdout for example:
#
# ui_service
# app_service
carica_risorsa utente
# <key>: Name of the artifact e.g. app-image, baseimage etc.
# <prop>: Type of property e.g. name, type, tags, signature
load_artifact <key> [<prop>]
Descrizione:
- Visualizza il valore della proprietà specificata del repository, se vengono forniti i valori
e e . - Elenca tutte le proprietà disponibili per il repository quando viene specificato solo l'
.
Esempio 1: Recupero di una proprietà specifica:
SIGNATURE=$(load_artifact ui_service signature)
Example2: Elenco di tutte le proprietà di un dato artefatto:
load_artifact ui_service
Utilizzato con 'list_repos per recuperare i valori delle proprietà
#
# iterate over all artifacts and print their image names
#
while read -r key; do
image=$(load_artifact $key name)
echo "Artifact saved as '$key' is named: '$image'"
done < <(list_artifacts)
Emette le seguenti linee sulla console:
Quando si recupera una proprietà specifica:
Artifact saved as 'ui_service' is named: 'us.icr.io/team_namespace/ui_service:2.4.3'
Artifact saved as 'backend_service' is named: 'us.icr.io/team_namespace/backend_service:2.4.3'
Quando si elencano tutte le proprietà di un dato artefatto:
Properties available for 'ui_service': name, type, tags, signature
Serializza
Serializzare i dati pipelinectl in un file JSON trasferibile da utilizzare come payload per i trigger webhook della pipeline. Può serializzare i repository impostati da save_repo, le risorse impostate da save_artifact e le variabili di ambiente impostate da set_env.
Indicatori (facoltativi):
--all-repos # all the repository information set by `pipelinectl`
--all-artifacts # all the artifacts information set by `pipelinectl`
Esempio:
Il seguente codice salva tutti i repository, tutte le risorse e <env_variable1>, <env_variable2> nel file foo.json:
pipelinectl serialize --all-repos --all-artifacts <env_variable1> <env_variable2> > foo.json
```Questo comando non è un alias. È necessario `pipelinectl` in modo esplicito.
{: note}
### deserializzare {: #deserialize}
Deserializza il `pipelinectl` da JSON a file, in modo che `pipelinectl` possa lavorare nella pipeline attivata. Utilizza il JSON serializzato dal comando `pipelinectl serialize` come argomento.
Esempio:
```bash {: codeblock}
pipelinectl deserialize ./foo.json
```Questo comando non è un alias; è necessario specificare esplicitamen `pipelinectl`.
{: note}
## Metodi di basso livello {: #low-level-methods}
Questi metodi sono esposti solo per motivi di completezza. Utilizzare i metodi solo in rare occasioni.
### dati_input {: #put_data}
```bash {: codeblock}
# <key>: Name of the data
# <prop>: Type of property e.g. name, type, tags, signature
# <value>: Value of the property
put_data <key> <prop> <value>
Imposta prop su value per la voce definita da key.
recupera_dati
# <key>: Key of data
# <prop>: Type of property e.g. name, type, tags, signature
# <value>: Value of the property
get_data <key>
get_data <key> <prop>
Stampa prop della voce definita da key. Se prop non viene fornito, restituisce tutti i prop per key. Restituisce un codice di uscita diverso da zero quando key non
ha prop.
salva_asset
# <prop>: Type of property; for example, uri, id, blob
# <value>: Value of the property
save_asset <prop1> <value1> blob <json_string or path to a json file>
save_asset <prop1> <value1> <prop2> <value2> blob <json_string or path to a json file>
Salva le informazioni sugli asset nell'archiviazione pipelinectl per renderle accessibili in tutta la pipeline. Sono consentiti numeri arbitrari di proprietà. Tuttavia,blob è una proprietà riservata che è obbligatorio passare
e il valore corrispondente deve essere un percorso file per un file JSON valido o una stringa JSON valida. La proprietà save_asset crea voci immutabili. Non può essere richiamato due volte per la stessa combinazione di coppie
<prop> <value>.
carica_asset
# <prop>: Type of property; for example, uri, id
# <value>: Value of the property
load_asset # retrieves all assets stored by save_asset
load_asset <prop1> <value1> # retrieves one asset that matches prop1 = value1 saved during save_asset
load_asset <prop1> <value1> <prop2> <value2> # retrieves one asset that matches prop1 = value1 AND prop2 = value2 saved during save_asset
Richiama un asset che corrisponde alle coppie <prop> <value> fornite. Se richiamato senza una combinazione <prop> <value>, richiama tutti gli asset salvati utilizzando save_asset nella pipeline all'interno di un array json. La proprietà blob è una proprietà riservata, quindi non può essere utilizzata come proprietà corrispondente per load_asset.
salva_prova
# <prop>: Type of property; for example, blob, sha
# <value>: Value of the property
save_evidence <prop1> <value1> blob <json_string or path to a json file>
save_evidence <prop1> <value1> <prop2> <value2> blob <json_string or path to a json file>
Salva le informazioni sulle prove nell'archiviazione pipelinectl per renderle accessibili in tutta la pipeline. Sono consentiti numeri arbitrari di proprietà. comunque, il blob property è una proprietà riservata che è obbligatorio
passare e il suo valore corrispondente deve essere un percorso file per un file json valido o una stringa json valida. La proprietà save_evidence crea voci immutabili. Non può essere richiamato due volte per la stessa combinazione
di coppie <prop> <value>.
carica_prova
# <prop>: Type of property; for example, id, sha
# <value>: Value of the property
load_evidence # retrieves all evidences that are stored by save_evidence
load_evidence <prop1> <value1> # retrieves one evidence that matches prop1 = value1 saved during save_evidence
load_evidence <prop1> <value1> <prop2> <value2> # retrieves one evidence that matches prop1 = value1 AND prop2 = value2 saved during save_evidence
Richiama una prova che corrisponde alle coppie <prop> <value> fornite. Se richiamato senza una combinazione <prop> <value>, richiama tutte le prove salvate utilizzando save_evidence nella pipeline all'interno di un array json. La proprietà blob è una proprietà riservata, quindi non può essere utilizzata come proprietà corrispondente per load_evidence.
elimina_prove
delete_evidences # deletes all the evidences stored inside pipelinectl so far using save_evidence
Questo comando cancella tutte le prove memorizzate all'interno di pipelinectl, che sono state salvate utilizzando save_evidence.
save_string (obsoleta)
save_string è obsoleto, utilizzare set_env.
save_string <key> <value>
Salva una stringa arbitraria che può essere richiamata successivamente con load_string.
load_string (obsoleto)
load_string è obsoleto, utilizzare get_env.
load_string <key>
Stampa la stringa memorizzata in key.