pipelinectl

pipelinectl é um armazenamento leve do tipo chave-valor que você pode usar nos pipelines d DevSecOps para compartilhar dados entre tarefas e os scripts de automação de conformidade.

Para obter mais informações sobre onde esta ferramenta é usada, consulte Adicionando etapas de teste e construção a pipelines.

Cloud Object Storage configuração para dados do pipeline

Cloud Object Storage (COS) oferece armazenamento ilimitado e persistente para dados de pipeline, como artefatos de compilação, relatórios de teste e arquivos intermediários. Ao contrário do armazenamento local padrão, os arquivos armazenados no COS permanecem entre as execuções do pipeline e podem ser compartilhados entre diferentes pipelines.

pipelinectl Os comandos que suportam o bucket COS como armazenamento persistente explícito são:

O bucket de dados COS deve ser separado do seu bucket de armazenamento de evidências devido a requisitos de auditoria e conformidade.

Configurar o COS para dados do pipeline

Para usar o COS com as operações de arquivo do pipelinectl, siga estas etapas de configuração:

  1. Criar um bucket de dados
  • Você pode usar uma instância existente do Cloud Object Storage ou criar uma nova. Siga as instruções em " Configurando o Cloud Object Storage " para:
  • Crie um bucket de dados (deve ser diferente do seu bucket de armazenamento de provas)
  • Crie uma credencial de serviço para o bucket
  1. Configurar permissões do IAM

Atribua as seguintes funções à sua credencial de serviço para o bucket de dados: Grave, Grave de Objetos, Leia e Leia de Conteúdo.

Para obter instruções detalhadas, consulte Permissões de acesso ao Bucket.

  1. Configurar propriedades do ambiente

Adicione as seguintes propriedades de ambiente ao seu pipeline do DevSecOps:

Propriedade Tipo Valor Descrição
data-cos-api-key Seguro Sua chave da API do COS Chave API das credenciais do serviço
data-cos-bucket-name Texto Nome do seu bucket Nome do seu bucket de dados
data-cos-endpoint Texto Terminal COS URL Endpoint para a região do seu bucket

Para encontrar o endpoint do COS URL, acesse a página de configuração do seu bucket e copie o endpoint correspondente à região do seu bucket (por exemplo, s3.us-south.cloud-object-storage.appdomain.cloud). Sempre que possível, utilize o endpoint direto ou privado para obter melhor desempenho e segurança.

Armazene a chave da API como uma propriedade segura para proteger credenciais confidenciais.

  1. Configurar o ciclo de vida do bucket (recomendado)

Defina uma política de ciclo de vida para excluir automaticamente dados antigos do pipeline. Recomenda-se uma regra de validade de 7 dias para a maioria dos dados de pipeline. Para obter instruções, consulte Políticas de ciclo de vida.

Compreendendo o escopo dos dados COS

Ao contrário dos comandos save_result e set_env, cujo escopo se limita automaticamente a execuções individuais do pipeline, as operações com arquivos que utilizam o backend COS (--storage=cos) são realizadas em um bucket compartilhado que permanece ativo em todas as execuções do pipeline.

Principais comportamentos:

Sem isolamento automático entre execuções: os arquivos salvos com a mesma chave em diferentes execuções do pipeline se sobrescrevem mutuamente.

Espaço de nomes compartilhado do bucket: Todas as execuções do pipeline que utilizam a mesma configuração do COS compartilham o mesmo espaço de nomes do bucket.

Armazenamento persistente: os arquivos permanecem no COS até serem explicitamente excluídos ou expirarem de acordo com as regras de ciclo de vida do bucket.

Comparação de escopos:

Tabela 1. Comparação do escopo dos comandos
Comando Scope Persistência
save_result Execução de um único pipeline Específico para corrida
set_env Execução de um único pipeline Específico para corrida
save_file (local) Execução de um único pipeline Específico para corrida
save_file --storage=cos Compartilhado em todas as execuções Persistente

Quando você usa list_files --storage=cos``, o comando retorna TODOS os arquivos no bucket configurado, e não apenas os arquivos da execução atual do pipeline. Use a filtragem por prefixo para refinar os resultados.

Melhores práticas para operações com arquivos COS

Siga estas práticas recomendadas para organizar e gerenciar arquivos de forma eficaz no Cloud Object Storage e evitar a sobrescrita acidental de dados.

Evitando conflitos

Para evitar a sobrescrita de dados e conflitos:

  • Inclua identificadores exclusivos nas chaves (por exemplo, ID da execução do pipeline, carimbo de data/hora)
  • Use padrões de chave hierárquicos: project/component/run-id/filename
  • Evite chaves genéricas como build-artifact sem qualificadores

Exemplo de conflito:

# 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

Exemplo de uso seguro:

# 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

Principais convenções de nomenclatura

Use padrões hierárquicos

Organize os arquivos com nomes de chaves descritivos e hierárquicos:

# 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

Incluir identificadores únicos

Use variáveis para tornar as chaves únicas a cada execução do pipeline:

  • ID da execução do pipeline: ${PIPELINE_RUN_ID}
  • Número de construção: ${BUILD_NUMBER}
  • Registro de data e hora: $(date +%Y%m%d-%H%M%S)
  • Git SHA da confirmação: ${GIT_COMMIT}

Use nomes descritivos

Escolha nomes claros e significativos que indiquem a finalidade do arquivo:

# Good: Clear purpose
save_file --storage=cos "ui-service-image-${VERSION}" ./image.tar
# Avoid: Ambiguous
save_file --storage=cos "img" ./image.tar

Evite prefixos reservados

NÃO utilize chaves que comecem com devsecops-pipeline-data/ (por exemplo, devsecops-pipeline-data/path/to/file). O prefixo devsecops-pipeline-data/ está reservado para operações internas do pipeline. O uso de prefixos reservados pode causar corrupção de dados ou falhas no pipeline.

Filtragem e recuperação

Use a filtragem por prefixo para restringir os resultados ao listar arquivos:

# 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"

Remover explicitamente os arquivos temporários

Quando os arquivos não forem mais necessários, exclua-os explicitamente:

remove_file --storage=cos "temp/build-${PIPELINE_RUN_ID}/cache.tar"

Considerações de segurança

  • Gerenciamento de chaves de API: sempre armazene a chave de API ( data-cos-api-key ) como uma propriedade segura. Nunca insira chaves de API diretamente em scripts ou arquivos de configuração.
  • Princípio do privilégio mínimo: conceda apenas as permissões de IAM mínimas necessárias listadas acima.
  • Separação de buckets: use um bucket específico para os dados do pipeline, separado do seu bucket de armazenamento de evidências.

Uso

pipelinectl fornece um binário único. Seu comportamento depende de seu nome (como em busybox). Quando chamado como pipelinectl, o programa deve ser fornecido como o primeiro argumento, por exemplo, pipelinectl get_data.

Aliases e métodos disponíveis:

set_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 uma sequência arbitrária que, posteriormente, pode ser recuperada com get_env.

Se o <value> argumento estiver ausente, ele set_env será lido da entrada padrão. set_env Também é possível passar vários pares de valores-chave para serem definidos de uma só vez.

Exemplo:

# 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"

definir_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 uma string arbitrária imutável que pode ser recuperada posteriormente com get_env. Uma vez salvo com set_envc, ele não pode ser alterado por outras chamadas set_env``set_envc /.

Se o <value> argumento estiver ausente, ele set_envc será lido da entrada padrão. set_envc Também é possível passar vários pares de valores-chave para serem definidos de uma só vez.

  • Uma vez definida com set_envc, a chave não pode ser sobrescrita com novas invocações de set_envc ou set_env.
  • As variáveis já definidas com set_env não podem ser substituídas com set_envc.

Exemplo:

# 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]

Imprima o valor de configuração armazenado (nesta ordem):

  • Caso set_env tenha sido usado anteriormente com key, esse valor será recuperado
  • Há uma tentativa de leitura do arquivo $CONFIG_DIR/$key (CONFIG_DIR é padronizado como /config)
  • Imprime o valor padrão especificado (se houver).
  • Exibe uma mensagem de erro e retorna um código de saída diferente de zero

Exemplo:

get_env app-name "default-app-name"

listar_ambiente

list_env

Exibe as chaves e as variáveis de ambiente salvas do processo " set_env.

Exemplo:

list_env

definir_segredo

# <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 um segredo que pode ser recuperado posteriormente com get_secret.

Se o argumento não for fornecido, o set_secret o lê da entrada padrão.

  • O conteúdo definido por set_secret não é serializado e, portanto, não estará disponível em subpipelines / pipelineruns assíncronos.
  • Desative o registro de depuração relacionado à execução deste comando, para garantir que o conteúdo do segredo salvo não apareça nem mesmo nos registros de depuração.
  • Certifique-se de que os scripts e qualquer lógica não dependam de nenhuma saída do site set_secret (há uma instrução de impressão feita para mascarar o valor secreto utilizando a funcionalidade ::add-mask:: )

Exemplo:

# 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"

obter_segredo

# <key>: The name of the secret set with set_secret or set as Secure Value in pipeline UI
get_secret <key> [default]

Recupere o valor secreto armazenado (nesta ordem):

  • Caso set_secret tenha sido usado anteriormente com key, esse valor será recuperado
  • Há uma tentativa de leitura do arquivo $SECRET_CONFIG_DIR/$key (SECRET_CONFIG_DIR é padronizado como /config/secure-properties)
  • Imprime o valor padrão especificado (se houver).
  • Exibe uma mensagem de erro e retorna um código de saída diferente de zero

Exemplo:

get_secret cookie-token "default-token"
get_secret specific-account-ibmcloud-api-key "$(get_secret ibmcloud-api-key "")"

Sempre coloque entre aspas as variáveis que contêm valores confidenciais

Ao armazenar um valor secreto em uma variável do shell e, em seguida, usar essa variável, coloque-a sempre entre aspas duplas. Sem aspas, o shell pode dividir o valor em várias palavras antes de passá-lo para um comando.

Não utilize variáveis sem aspas que contenham valores confidenciais.

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

Sempre coloque a variável entre aspas para manter o valor intacto.

export API_KEY=$(get_secret my-api-key)
# Safe: the value is passed as a single, intact string.
some-cli login --apikey "$API_KEY"

A mesma regra se aplica sempre que a variável for utilizada — em argumentos de comando, na interpolação de strings ou ao gravar valores em um arquivo.

# Safe
curl -H "Authorization: Bearer $API_KEY" https://example.com/api
echo "$API_KEY" > /tmp/credentials.txt

lista_de_segredos

list_secrets

Exibe as chaves salvas do processo set_secret e as variáveis de ambiente do tipo Secure Value na interface do usuário do pipeline.

Exemplo:

list_secrets

remover_segredo

remove_secret <key>

Esse comando anula o segredo armazenado no pipelinectl, que foi salvo usando set_secret.

save_file

# <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 um arquivo arbitrário que, posteriormente, pode ser recuperado com load_file.

Diretórios não são suportados.

Armazenamento local (padrão):

Os arquivos são armazenados na área de trabalho do pipeline e seu escopo se limita à execução atual do pipeline.

save_file some_config ./config.yaml

Armazenamento COS:

Os arquivos são armazenados em Cloud Object Storage e permanecem disponíveis entre as execuções do pipeline. Consulte “Âmbito e persistência dos dados ” para obter informações importantes sobre o comportamento dos buckets compartilhados.

Pré-requisitos: Certifique-se de que o COS esteja configurado. Consulte a configuração do 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

load_file

# <identifier>: Name of the file to retrieve (for example, 'build-artifact', 'my-report')
load_file <identifier>

Imprime o arquivo salvo em stdout.

Armazenamento local (padrão):

Recupera os arquivos armazenados na área de trabalho do pipeline para a execução atual.

load_file some_config > some_config.yaml

Armazenamento COS:

Recupera arquivos do site Cloud Object Storage.

Pré-requisitos: Certifique-se de que o COS esteja configurado. Consulte a configuração do 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

listar arquivos

Lista todos os arquivos armazenados salvos via save_file, opcionalmente filtrados por um prefixo de chave.

# <prefix>: (optional) Filter results to keys starting with this prefix
list_files <prefix>

Exibe a lista de chaves de arquivo em stdout.

Armazenamento local (padrão):

Lista os arquivos armazenados na área de trabalho do pipeline para a execução atual.

list_files # lists all saved files
list_files saved-reports- # lists files with "saved-reports-" prefix

Armazenamento COS:

Lista os arquivos disponíveis em Cloud Object Storage. Retorna TODOS os arquivos no bucket configurado, e não apenas os arquivos da execução atual do pipeline. Use o parâmetro de prefixo opcional para filtrar os resultados e restringir a busca a arquivos específicos.

Pré-requisitos: Certifique-se de que o COS esteja configurado. Consulte a configuração do 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"

remover_arquivo

Exclui um arquivo armazenado.

# <identifier>: Name of the file to remove (for example, 'build-artifact', 'my-report')
remove_file <identifier>

Armazenamento local (padrão):

Remove os arquivos da área de trabalho do pipeline para a execução atual.

remove_file my-report

Armazenamento COS:

Remove arquivos de Cloud Object Storage.

Pré-requisitos: Certifique-se de que o COS esteja configurado. Consulte a configuração do 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"

save_repo

# <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 um novo repositório com o pipeline ou atualiza um existente.

Propriedades suportadas:

  • url: O URL que pode ser usado para clonar o repositório.
  • path: local do repositório clonado em relação à raiz da área de trabalho.

Também é possível usar outros nomes de propriedade, mas, para evitar conflitos de nomenclatura, eles devem ser precedidos por um identificador específico do serviço; por exemplo, em vez de usar foo, use my-service.foo.

Exemplo:

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}"

Como usar stdin como uma fonte de valor

Os valores podem ser fornecidos a partir de stdin, se as seguintes condições forem verdadeiras:

  • O conteúdo é streamed para o comando
  • Uma propriedade não tem um valor e =

Exemplo:

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 vários valores estiverem faltando com = as saídas de comandos com um erro, pois não pode determinar qual propriedade pertence ao valor em stdin.

Propriedades sem um valor mas ainda anexando = têm uma sequência vazia como um valor.

save_repo app_ui "bar="
load_repo app_ui bar # returns an empty string

list_repos

list_repos

Exibe a lista de <key> dos repositórios armazenados em stdout.

Exemplo:

list_repos
# returns the list of stored repository keys to stdout for example:
#  app_ui
#  app_repo

load_repo

# <key>: Key of the repository, e.g. repository name
# <prop>: Name of the property, e.g. commit, branch, url
load_repo <key> [<prop>]

Imprime o valor da propriedade especificada do repositório. Lista todas as propriedades disponíveis para o repositório quando apenas o repositório é fornecido. Retorna um erro indicando que nenhuma propriedade correspondente foi encontrada se o repositório ou a propriedade fornecida for inválida.

Descrição:

  • Exibe o valor da propriedade especificada do repositório, caso os valores de <key> e <prop> sejam fornecidos.
  • Lista todas as propriedades disponíveis para o repositório quando apenas o <key> é fornecido.
  • Retorna um erro indicando que não foram encontradas propriedades correspondentes caso o <key> fornecido seja inválido.

Exemplo 1: Obtenção de uma propriedade específica:

REPO_SHA=$(load_repo app_ui commit)

Exemplo 2: Listagem de todas as propriedades de um determinado repositório:

REPO_SHA=$(load_repo app_ui)

Usado com ' list_repos para recuperar valores de propriedade

#
# 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)

Outputs as linhas a seguir para o console:

Ao recuperar uma propriedade específica:

 Repository saved as 'my-frontend' is at: 'github.com/my-team/frontend'
 Repository saved as 'my-backend' is at: 'github.com/my-team/backend'

Ao listar todas as propriedades de um determinado repositório:

 Properties available for '$key'.

save_result

# <stage>: Stage name e.g. test, detect-secrets, static-scan
# <path>: Path where will be stored the file, string
save_result  <stage> <path>

Salva um arquivo de teste ou de resultado de verificação de qualquer tipo para uma etapa. Posteriormente, esse arquivo poderá ser recuperado por meio de load_result. Por padrão, os dados são salvos com o caminho relativo à área de trabalho como chave.

Usando o sinalizador de recurso PIPELINECTL_USE_PATH_AS_KEY, os dados são salvos com o caminho fornecido como a chave.

Exemplo:

#
# 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

list_results

# <stage>: Stage name
list_results <stage>

Lista os nomes dos arquivos salvos para uma etapa.

Exemplo:

list_results test
# mocha_results.json
# coverage.xml

load_result

# <stage>: Stage name e.g. test, detect-secrets, static-scan
# <file>: File name e.g. mocha_results.json
load_result <stage> <file>

Imprime as chaves de arquivo salvas em stdout. Por padrão, uma chave é o caminho relativo ao espaço de trabalho do caminho do arquivo fornecido em save_result. Usando o sinalizador de recurso PIPELINECTL_USE_PATH_AS_KEY, uma chave é o caminho do caminho de arquivo fornecido em save_result. Para obter a lista exata de chaves, use list_results.

Exemplo:

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

Usado em conjunto com 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)

save_artifact

# <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 um novo artefato de construção com o pipeline ou atualiza um existente.

Imagens do contêiner

Algumas propriedades sugeridas que você pode usar:

  • type: pode ser qualquer tipo de artefato incluindo image.
  • name: um nome completo para o artefato. Por exemplo, para uma imagem, algo que pode ser usado pelo docker pull
  • signature: Uma assinatura válida.
  • digest: A sha256 digerir.
  • source: Por exemplo, http://<some-git-url>/blob/<commithash>/<path-to-file>

Quaisquer propriedades podem ser definidas em cima dessas propriedades.

Para uma imagem, a propriedade name também deve conter a tag para a imagem

Exemplo:

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}"

Como usar stdin como uma fonte de valor

Os valores podem ser fornecidos a partir de stdin, se os seguintes forem verdadeiros:

  • O conteúdo é streamed para o comando
  • Uma propriedade não tem um valor e =

Exemplo:

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 vários valores estiverem faltando com = as saídas de comandos com um erro, pois não pode determinar qual propriedade pertence ao valor em stdin.

Propriedades sem um valor mas ainda anexando = têm uma sequência vazia como um valor.

save_artifact ui_service "bar="
load_artifact ui_service bar # returns an empty string

list_artifacts

list_artifacts

Exibe a lista de <key> dos artefatos armazenados em stdout.

Exemplo:

list_artifacts
# returns the list of stored artifact keys to stdout for example:
#
# ui_service
# app_service

load_artifact

# <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>]

Descrição:

  • Exibe o valor da propriedade especificada do repositório, caso os valores de <key> e <prop> sejam fornecidos.
  • Lista todas as propriedades disponíveis para o repositório quando apenas o <key> é fornecido.

Exemplo 1: Obtenção de uma propriedade específica:

SIGNATURE=$(load_artifact ui_service signature)

Example2: Listar todas as propriedades de um determinado artefato:

load_artifact ui_service

Usado com ' list_repos para recuperar valores de propriedade

#
# 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)

Outputs as linhas a seguir para o console:

Ao recuperar uma propriedade específica:

 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'

Ao listar todas as propriedades de um determinado artefato:

 Properties available for 'ui_service': name, type, tags, signature

Serializar

Serialize dados pipelinectl em um arquivo JSON transferível para ser usado como carga útil para triggers de webhook pipeline. Ele pode serializar repositórios configurados por save_repo, artefatos configurados por save_artifact, e variáveis de ambiente definidas por set_env.

(Opcional) bandeiras:

--all-repos         # all the repository information set by `pipelinectl`
--all-artifacts     # all the artifacts information set by `pipelinectl`

Exemplo:

O código a seguir salva todos os repositórios, todos os artefatos e <env_variable1>, <env_variable2> no arquivo foo.json:

pipelinectl serialize --all-repos --all-artifacts <env_variable1> <env_variable2> > foo.json
```Este comando não é um alias. Você precisa do `pipelinectl` explicitamente.
{: note}


### desserializar {: #deserialize}

Desserialize o `pipelinectl` a partir de JSON para arquivos, assim, `pipelinectl` pode trabalhar no pipeline acionado. Use o JSON que é serializado pelo comando `pipelinectl serialize` como o argumento.

Exemplo:

```bash {: codeblock}
pipelinectl deserialize ./foo.json
```Este comando não é um alias; é necessário especificar explicitam `pipelinectl`.
{: note}


## Métodos de nível baixo nível {: #low-level-methods}

Esses métodos só são expostos para o bem da completude. Use os métodos apenas em raras ocasiões.

### put_data {: #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>

Configura prop como value para a entrada definida por key.

get_data

# <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>

Exibe prop da entrada definida por key. Se prop não for fornecido, o método retorna todos os prop s para o key. Retorna um código de saída diferente de zero quando key não possui prop``.

salvar_ativo

# <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 informações do ativo para o armazenamento de pipelinectl para ser acessível em todo o pipeline. Números arbitrários de propriedades são permitidos.. No entanto,blob é uma propriedade reservada cuja transmissão é obrigatória e seu valor correspondente deve ser um caminho de arquivo para um arquivo JSON válido ou uma string JSON válida. A propriedade save_asset cria entradas imutáveis.. Não pode ser chamado duas vezes para a mesma combinação de pares <prop> <value>.

carregar_recurso

# <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

Recupera um ativo que corresponde aos pares de <prop> <value> fornecidos Se chamado sem uma combinação <prop> <value>, ele recupera todos os ativos que são salvos usando save_asset no pipeline dentro de uma matriz json. A propriedade blob é uma propriedade reservada, portanto, ela não pode ser usada como uma propriedade correspondente para load_asset

salvar_evidência

# <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 informações de evidência para o armazenamento de pipelinectl para ser acessível em todo o pipeline. Números arbitrários de propriedades são permitidos.. No entanto, o blob property é uma propriedade reservada cuja transmissão é obrigatória e seu valor correspondente deve ser um caminho de arquivo para um arquivo JSON válido ou uma string JSON válida. A propriedade save_evidence cria entradas imutáveis.. Não pode ser chamado duas vezes para a mesma combinação de pares <prop> <value>.

carregar_provas

# <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

Recupera uma evidência que corresponde aos pares de <prop> <value> fornecidos Se chamado sem uma combinação <prop> <value>, ele recupera todas as evidências salvas usando save_evidence no pipeline dentro de uma matriz json. A propriedade blob é uma propriedade reservada, portanto, ela não pode ser usada como uma propriedade correspondente para load_evidence

excluir_evidências

delete_evidences # deletes all the evidences stored inside pipelinectl so far using save_evidence

Esse comando limpa todas as evidências armazenadas dentro do pipeline, que foram salvas usando save_evidence.

save_string (descontinuado)

save_string foi descontinuado, em seu lugar, utilize set_env.

save_string <key> <value>

Salva uma sequência arbitrária que, posteriormente, pode ser recuperada com load_string.

load_string (descontinuado)

load_string foi descontinuado, em seu lugar, utilize get_env.

load_string <key>

Exibe a sequência de caracteres armazenada em key``.