pipelinectl

pipelinectl es un almacén ligero de clave-valor que se puede utilizar en los flujos de trabajo de DevSecOps para compartir datos entre tareas y los scripts de automatización del cumplimiento normativo.

Para obtener más información sobre dónde se utiliza esta herramienta, consulte Adición de pasos de prueba y compilación a interconexiones.

Cloud Object Storage configuración de los datos del canal

Cloud Object Storage (COS) ofrece almacenamiento ilimitado y permanente para datos del proceso de integración, como artefactos de compilación, informes de pruebas y archivos intermedios. A diferencia del almacenamiento local predeterminado, los archivos almacenados en COS se conservan entre ejecuciones de los flujos de trabajo y pueden compartirse entre diferentes flujos de trabajo.

pipelinectl Comandos que admiten el depósito COS como almacenamiento persistente explícito son:

El contenedor de datos COS debe estar separado del contenedor del almacén de pruebas debido a los requisitos de auditoría y cumplimiento normativo.

Configurar COS para los datos del canal

Para utilizar COS con las operaciones de archivos de pipelinectl, sigue estos pasos de configuración:

  1. Crear un depósito de datos
  • Puedes utilizar una instancia existente de Cloud Object Storage o crear una nueva. Sigue las instrucciones de « Configuración de Cloud Object Storage » para:
  • Crea un depósito de datos (debe ser independiente del depósito del almacén de pruebas)
  • Crea unas credenciales de servicio para el depósito
  1. Configurar permisos de IAM

Asigna los siguientes roles a tus credenciales de servicio para el depósito de datos: Writer, Object Writer, Reader y Content Reader.

Para obtener instrucciones detalladas, consulta « Permisos de acceso a Bucket ».

  1. Configurar las propiedades del entorno

Añade las siguientes propiedades de entorno a tu canalización de « DevSecOps »:

Propiedad Tipo Valor Descripción
data-cos-api-key Seguro Tu clave API de COS Clave API de las credenciales del servicio
data-cos-bucket-name Texto El nombre de tu cubo Nombre de tu depósito de datos
data-cos-endpoint Texto Punto final COS URL Punto de acceso para la región de tu depósito

Para encontrar el punto de acceso de COS URL, ve a la página de configuración de tu depósito y copia el punto de acceso correspondiente a la región de tu depósito (por ejemplo, s3.us-south.cloud-object-storage.appdomain.cloud). Utiliza el punto de acceso directo o privado siempre que sea posible para obtener un mejor rendimiento y mayor seguridad.

Guarda la clave API como una propiedad segura para proteger las credenciales confidenciales.

  1. Configurar el ciclo de vida del depósito (recomendado)

Configura una política de ciclo de vida para eliminar automáticamente los datos antiguos del pipeline. Se recomienda aplicar una regla de caducidad de 7 días a la mayoría de los datos de la canalización. Para obtener instrucciones, consulte las políticas de ciclo de vida.

Comprender el alcance de los datos COS

A diferencia de comandos save_result y set_env, cuyo ámbito se limita automáticamente a cada ejecución individual del pipeline, las operaciones con archivos que utilizan el backend COS (--storage=cos) se realizan en un depósito compartido que se mantiene en todas las ejecuciones del pipeline.

Comportamientos clave:

No hay aislamiento automático de ejecuciones: los archivos guardados con la misma clave procedentes de diferentes ejecuciones del proceso de automatización se sobrescriben entre sí.

Espacio de nombres compartido del depósito: Todas las ejecuciones de la canalización que utilizan la misma configuración de COS comparten el mismo espacio de nombres del depósito.

Almacenamiento persistente: los archivos permanecen en COS hasta que se eliminan explícitamente o caducan según las reglas del ciclo de vida del depósito.

Comparación de alcances:

Tabla 1. Comparación del ámbito comando
Mandato Ámbito Persistencia
save_result Trayecto de una sola tubería Específico para el running
set_env Trayecto de una sola tubería Específico para el running
save_file (local) Trayecto de una sola tubería Específico para el running
save_file --storage=cos Compartidos en todas las tiradas Persistente

Cuando utilizas list_files --storage=cos, el comando devuelve TODOS los archivos del depósito configurado, no solo los archivos de la ejecución actual del pipeline. Utiliza el filtrado por prefijo para acotar los resultados.

Buenas prácticas para las operaciones con archivos COS

Sigue estas recomendaciones para organizar y gestionar archivos de forma eficaz en Cloud Object Storage y evitar sobrescrituras involuntarias de datos.

Evitar conflictos

Para evitar la sobrescritura de datos y los conflictos:

  • Incluye identificadores únicos en las claves (por ejemplo, el ID de la ejecución del proceso de automatización o la marca de tiempo)
  • Utiliza patrones de claves jerárquicas: project/component/run-id/filename
  • Evita claves genéricas como « build-artifact » sin calificadores

Ejemplo de conflicto:

# 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

Ejemplo 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

Convenciones clave para la denominación

Utiliza patrones jerárquicos

Organiza los archivos con nombres de clave descriptivos y jerá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

Utiliza variables para que las claves sean únicas en cada ejecución del pipeline:

  • ID de ejecución del proceso: ${PIPELINE_RUN_ID}
  • Número de build: ${BUILD_NUMBER}
  • Indicación de fecha y hora $(date +%Y%m%d-%H%M%S)
  • Git SHA de la confirmación: ${GIT_COMMIT}

Utiliza nombres descriptivos

Elige nombres claros y significativos que indiquen la finalidad del archivo:

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

Evita los prefijos reservados

NO utilices claves que empiecen por devsecops-pipeline-data/ (por ejemplo, devsecops-pipeline-data/path/to/file). El prefijo devsecops-pipeline-data/ está reservado para operaciones internas del proceso. El uso de prefijos reservados puede provocar la corrupción de datos o fallos en el proceso.

Filtrado y recuperación

Utiliza el filtrado por prefijos para acotar los resultados al mostrar la lista de archivos:

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

Eliminar explícitamente los archivos temporales

Cuando ya no necesites los archivos, elimínalos de forma explícita:

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

Consideraciones acerca de la seguridad

  • Gestión de claves API: Guarda siempre la clave « data-cos-api-key » como una propiedad segura. Nunca incluyas claves de API de forma estática en scripts o archivos de configuración.
  • Princípio del privilegio mínimo: Concede únicamente los permisos de IAM mínimos necesarios que se enumeran más arriba.
  • Separación de buckets: Utiliza un bucket específico para los datos de Pipeline, independiente del bucket del almacén de pruebas.

Uso

pipelinectl proporciona un solo binario. Su comportamiento depende de su nombre (como en busybox). Cuando se invoca como pipelinectl, se debe proporcionar el programa como primer argumento, por ejemplo pipelinectl get_data.

Alias y métodos disponibles:

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>

Se guarda una serie arbitraria que se puede recuperar más adelante con get_env.

Si falta el <value> argumento, lo set_env lee desde la entrada estándar. set_env También admite pasar varios pares clave-valor para configurarlos a la vez.

Ejemplo:

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

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

Guarda una cadena arbitraria inmutable que se puede recuperar más adelante con get_env. Una vez guardado con set_envc, no se puede modificar con más llamadas set_env set_envc /.

Si falta el <value> argumento, lo set_envc lee desde la entrada estándar. set_envc También admite pasar varios pares clave-valor para configurarlos a la vez.

  • Una vez establecida con set_envc, la clave no se puede sobrescribir con nuevas invocaciones de set_envc o set_env.
  • Las variables que ya se han establecido con set_env no se pueden sobrescribir con set_envc.

Ejemplo:

# 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 el valor de configuración almacenado (en este orden):

  • Si se ha utilizado anteriormente set_env con key, se recupera dicho valor
  • Se intenta leer el archivo $CONFIG_DIR/$key (CONFIG_DIR toma como valor predeterminado /config)
  • Se imprime el valor predeterminado especificado (si hay alguno)
  • Muestra un mensaje de error y devuelve un código de salida distinto de cero

Ejemplo:

get_env app-name "default-app-name"

list_env

list_env

Muestra las claves y variables de entorno guardadas del proceso ' set_env '.

Ejemplo:

list_env

establecer_secreto

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

Guarda un secreto que se puede recuperar más tarde con get_secret.

Si falta el argumento <value>, lo set_secret lee desde la entrada estándar.

  • El contenido establecido por set_secret no se serializa, por lo que no estará disponible a través de subpipelines / async pipelineruns.
  • Desactiva el registro de depuración relacionado con la ejecución de este comando, para garantizar que el contenido del secreto guardado no aparezca ni siquiera en los registros de depuración.
  • Asegúrese de que las secuencias de comandos y cualquier lógica no dependen de ninguna salida de set_secret (hay una sentencia print realizada para enmascarar el valor secreto utilizando la funcionalidad ::add-mask:: )

Ejemplo:

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

obtener_secreto

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

Recupera el valor secreto almacenado (en este orden):

  • Si se ha utilizado anteriormente set_secret con key, se recupera dicho valor
  • Se intenta leer el archivo $SECRET_CONFIG_DIR/$key (SECRET_CONFIG_DIR toma como valor predeterminado /config/secure-properties)
  • Se imprime el valor predeterminado especificado (si hay alguno)
  • Muestra un mensaje de error y devuelve un código de salida distinto de cero

Ejemplo:

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

Cita siempre las variables que contengan valores secretos

Cuando guardes un valor secreto en una variable de shell y luego utilices esa variable, envuélvela siempre entre comillas dobles. Si no se utilizan comillas, el shell puede dividir el valor en varias palabras antes de pasárselo a un comando.

No utilices variables sin comillas que contengan valores confidenciales.

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

Cita siempre la variable para mantener el 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"

La misma regla se aplica siempre que se utilice la variable: en argumentos comando, en la interpolación de cadenas o al escribir valores en un archivo.

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

lista_secretos

list_secrets

Muestra las claves guardadas del proceso set_secret y las variables de entorno de tipo Valor seguro en la interfaz de usuario de la canalización.

Ejemplo:

list_secrets

eliminar_secreto

remove_secret <key>

Este comando deshace el secreto almacenado dentro del pipelinectl, que fueron guardados 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>

Se guarda un archivo arbitrario que se puede recuperar más adelante con load_file.

No se da soporte a los directorios

Almacenamiento local (predeterminado):

Los archivos se almacenan en el espacio de trabajo del proceso y su ámbito se limita a la ejecución actual del proceso.

save_file some_config ./config.yaml

Almacenamiento COS:

Los archivos se almacenan en Cloud Object Storage y se conservan entre ejecuciones del proceso. Consulte « Ámbito de los datos y persistencia » para obtener información importante sobre el comportamiento de los buckets compartidos.

Requisitos previos: Asegúrese de que COS esté configurado. Consulte la configuración de 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>

Se imprime el archivo guardado en stdout.

Almacenamiento local (predeterminado):

Recupera los archivos almacenados en el espacio de trabajo del proceso para la ejecución actual.

load_file some_config > some_config.yaml

Almacenamiento COS:

Recupera archivos de Cloud Object Storage.

Requisitos previos: Asegúrese de que COS esté configurado. Consulte la configuración de 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_archivos

Lista todos los archivos almacenados guardados a través de save_file, filtrados opcionalmente por un prefijo de clave.

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

Muestra la lista de claves de archivo en stdout.

Almacenamiento local (predeterminado):

Muestra los archivos almacenados en el espacio de trabajo del proceso para la ejecución actual.

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

Almacenamiento COS:

Muestra los archivos de Cloud Object Storage. Devuelve TODOS los archivos del depósito configurado, no solo los archivos de la ejecución actual del proceso. Utiliza el parámetro de prefijo opcional para filtrar los resultados y limitar la búsqueda a archivos concretos.

Requisitos previos: Asegúrese de que COS esté configurado. Consulte la configuración de 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"

eliminar_archivo

Elimina un archivo guardado.

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

Almacenamiento local (predeterminado):

Elimina los archivos del espacio de trabajo del proceso para la ejecución actual.

remove_file my-report

Almacenamiento COS:

Elimina archivos de Cloud Object Storage.

Requisitos previos: Asegúrese de que COS esté configurado. Consulte la configuración de 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> ...]

Se registra un nuevo repositorio con la interconexión o se actualiza uno existente.

Propiedades soportadas:

  • url: El URL que se puede utilizar para clonar el repositorio.
  • path: la ubicación del repositorio clonado en relación con la raíz del espacio de trabajo.

También se pueden utilizar otros nombres de propiedades, pero para evitar conflictos de nombres, deben ir precedidos de un identificador específico del servicio; por ejemplo, en lugar de utilizar foo, utilice my-service.foo.

Ejemplo:

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

Utilización de stdin como origen de valor

Los valores se pueden proporcionar desde stdin, si se cumplen las condiciones siguientes:

  • El contenido se transmite para el mandato
  • Una propiedad no tiene un valor y =

Ejemplo:

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

Si faltan varios valores con =, el mandato sale con un error, porque no puede determinar qué propiedad pertenece al valor en stdin.

Las propiedades sin un valor pero que siguen añadiendo = tienen una serie vacía como valor.

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

list_repos

list_repos

Enumera los repositorios almacenados en <key> stdout.

Ejemplo:

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 el valor de la propiedad especificada del repositorio. Lista todas las propiedades disponibles para el repositorio cuando sólo se proporciona el repositorio. Devuelve un error indicando que no se han encontrado propiedades coincidentes si el repositorio o la propiedad proporcionados no son válidos.

Descripción:

  • Imprime el valor de la propiedad especificada del repositorio, si se proporcionan los valores y .
  • Enumera todas las propiedades disponibles del repositorio cuando solo se proporciona el.
  • Devuelve un error que indica que no se han encontrado propiedades coincidentes si el valor proporcionado no es válido.

Ejemplo 1 Obtención de una propiedad específica:

REPO_SHA=$(load_repo app_ui commit)

Ejemplo 2: Listado de todas las propiedades de un repositorio dado:

REPO_SHA=$(load_repo app_ui)

Se utiliza con ' list_repos ' para recuperar los valores de las propiedades

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

Genera las líneas siguientes en la consola:

Al recuperar una propiedad 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'

Al listar todas las propiedades de un repositorio determinado:

 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>

Guarda un archivo de prueba o de resultados de análisis arbitrario para una etapa. Más adelante, este archivo se podrá recuperar con load_result. Por defecto, los datos se guardan con la ruta relativa al espacio de trabajo como clave.

Utilizando el distintivo de característica PIPELINECTL_USE_PATH_AS_KEY, los datos se guardan con la vía de acceso proporcionada como clave.

Ejemplo:

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

Enumera los nombres de los archivos guardados para una etapa.

Ejemplo:

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>

Se imprimen las claves del archivo guardado en stdout. Por defecto, una clave es la ruta relativa al espacio de trabajo de la ruta del archivo proporcionada en save_result. Utilizando el distintivo de característica PIPELINECTL_USE_PATH_AS_KEY, una clave es la vía de acceso de la vía de acceso de archivo proporcionada en save_result. Para obtener la lista exacta de claves, utilice list_results.

Ejemplo:

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

Se utiliza junto con 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> ...]

Se registra un nuevo artefacto de compilación con la interconexión o se actualiza uno existente.

Imágenes de contenedor

Algunas propiedades sugeridas que puede utilizar:

  • type: puede ser cualquier tipo de artefacto incluido image.
  • name: un nombre completo para el artefacto. Por ejemplo, para una imagen, algo que docker pull puede utilizar.
  • signature: una firma válida.
  • digest: un resumen de sha256.
  • source: por ejemplo, http://<some-git-url>/blob/<commithash>/<path-to-file>

Las propiedades se pueden establecer encima de estas propiedades.

Para una imagen, la propiedad name también debe contener la etiqueta para la imagen.

Ejemplo:

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

Utilización de stdin como origen de valor

Los valores se pueden proporcionar desde stdin, si se cumple lo siguiente:

  • El contenido se transmite para el mandato
  • Una propiedad no tiene un valor y =

Ejemplo:

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

Si faltan varios valores con =, el mandato sale con un error, porque no puede determinar qué propiedad pertenece al valor en stdin.

Las propiedades sin un valor pero que siguen añadiendo = tienen una serie vacía como valor.

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

list_artifacts

list_artifacts

Enumera los artefactos almacenados en <key> stdout.

Ejemplo:

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

Descripción:

  • Imprime el valor de la propiedad especificada del repositorio, si se proporcionan los valores y .
  • Enumera todas las propiedades disponibles del repositorio cuando solo se proporciona el.

Ejemplo 1 Obtención de una propiedad específica:

SIGNATURE=$(load_artifact ui_service signature)

Example2: Listado de todas las propiedades de un artefacto determinado:

load_artifact ui_service

Se utiliza con ' list_repos ' para recuperar los valores de las propiedades

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

Genera las líneas siguientes en la consola:

Al recuperar una propiedad 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'

Al listar todas las propiedades de un artefacto determinado:

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

Serializar

Serialice los datos de pipelinectl en un archivo JSON transferible que se utilizará como carga útil para los desencadenantes de webhook de conducto. Puede serializar repositorios establecidos por save_repo, artefactos establecidos por save_artifact y variables de entorno establecidas por set_env.

(Opcional) Distintivos:

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

Ejemplo:

El código siguiente guarda todos los repositorios, todos los artefactos y <env_variable1>, <env_variable2> en el archivo foo.json:

pipelinectl serialize --all-repos --all-artifacts <env_variable1> <env_variable2> > foo.json
```Este comando no es un alias. Necesita `pipelinectl` explícitamente.
{: note}


### deserializar {: #deserialize}

Deserialice `pipelinectl` de JSON a archivos, para que `pipelinectl` pueda funcionar en la interconexión desencadenada. Utilice el JSON serializado por el mandato `pipelinectl serialize` como argumento.

Ejemplo:

```bash {: codeblock}
pipelinectl deserialize ./foo.json
```Este comando no es un alias; hay que escribir « `pipelinectl` » de forma explícita.
{: note}


## Métodos de bajo nivel {: #low-level-methods}

Estos métodos sólo se exponen en aras de la integridad. Utilice los métodos sólo en raras ocasiones.

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

Se establece prop en value para la 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>

Impresiones de prop la entrada definida por key. Si no prop se proporciona, devuelve todos prop los para el key. Devuelve un código de salida distinto de cero cuando no key tiene prop.

activo de salvaguarda

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

Guarda la información de activos en el almacenamiento de pipelinectl para que sea accesible en toda la interconexión. Se permiten números arbitrarios de propiedades. Sin embargo,blob es una propiedad reservada que es obligatoria y su valor correspondiente debe ser una ruta de archivo a un archivo json válido o una cadena json válida. La propiedad save_asset crea entradas inmutables. No se puede llamar dos veces para la misma combinación de pares <prop> <value>.

activo de carga

# <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 un activo que coincide con los pares <prop> <value> proporcionados. Si se llama sin una combinación <prop> <value>, recupera todos los activos que se guardan utilizando save_asset en el conducto dentro de una matriz json. La propiedad blob es una propiedad reservada, por lo que no se puede utilizar como una propiedad coincidente para load_asset.

evidencia_salvaguarda

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

Guarda la información de pruebas en el almacenamiento de pipelinectl para que sea accesible en toda la interconexión. Se permiten números arbitrarios de propiedades. sin embargo, el blob La propiedad es una propiedad reservada que es obligatoria y su valor correspondiente debe ser una ruta de archivo a un archivo json válido o una cadena json válida. La propiedad save_evidence crea entradas inmutables. No se puede llamar dos veces para la misma combinación de pares <prop> <value>.

evidencia_carga

# <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 una prueba que coincide con los pares <prop> <value> proporcionados. Si se llama sin una combinación <prop> <value>, recupera todas las pruebas que se guardan utilizando save_evidence en la interconexión dentro de una matriz json. La propiedad blob es una propiedad reservada, por lo que no se puede utilizar como una propiedad coincidente para load_evidence.

delete_Evidencias

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

Este mandato borra todas las pruebas almacenadas en el pipelinectl, que se han guardado utilizando save_evidence.

save_string (en desuso)

save_string está en desuso, utilice set_env en su lugar.

save_string <key> <value>

Se guarda una serie arbitraria que se puede recuperar más adelante con load_string.

load_string (en desuso)

load_string está en desuso, utilice get_env en su lugar.

load_string <key>

Muestra la cadena almacenada en key.