es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

“JSON inválido” en la canalización de AWS S3 al intentar agregar metadatos al objeto.

Estoy utilizando el canal de Bitbucket para cargar archivos en AWS S3. Mi archivo bitbucket-pipelines.yml sigue en gran medida este ejemplo aquí. Sin embargo, también estoy utilizando el parámetro EXTRA_ARGS para especificar varias opciones adicionales (principalmente exclusiones), y decidí agregar allí --metadata de la siguiente manera:

EXTRA_ARGS: “–size-only –exclude=README.md –metadata {\”testMeta\”: \”testData\”}”

…y esto funciona como se esperaba, los archivos cargados tienen metadatos personalizados adicionales. Pero si hago algo como esto…:

EXTRA_ARGS: “–size-only –exclude=README.md –metadata {\”testMeta\”: \”$BITBUCKET_COMMIT\”}”

es decir, utilizar una de las variables predeterminadas de Bitbucket, la salida de mi canal es la siguiente:

INFO: Iniciando despliegue a S3…
aws s3 sync /opt/atlassian/pipelines/agent/build/public s3://[mi-nombre-de-s3]/ –acl=public-read –size-only –exclude=README.md –metadata {“testMeta”: “8cd36431ef08d5be22f28b2cfc63d0179db3618d”}
Error al analizar el parámetro ‘–metadata’: JSON no válido: No se pudo descodificar ningún objeto JSON
JSON recibido: {“testMeta”:
✖ Error en el despliegue.

Así que parece que, aunque la variable se reemplaza con el ID de confirmación real (como se puede ver al final de la segunda línea en el código anterior), por alguna razón no se reconoce como un JSON válido. ¿Alguna idea de qué estoy haciendo mal?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Problema:

    El usuario está intentando agregar la variable predeterminada de Bitbucket a la opción --metadata en EXTRA_ARGS mientras utiliza la canalización de Bitbucket para cargar archivos en AWS S3. Sin embargo, a pesar de que la variable se reemplaza por el ID de comisión, no es reconocida como JSON válido por el sistema.

    Solución:

    El problema parece estar relacionado con la codificación JSON, que requiere el uso de comillas dobles para claves y valores. Sin embargo, al utilizar el parámetro EXTRA_ARGS, el valor se encuentra dentro de una cadena YAML, que requiere diferentes comillas. Para solucionar este problema, necesitamos usar comillas simples para todo el valor de --metadata y comillas dobles dentro del valor. El parámetro EXTRA_ARGS actualizado debe verse así:

    EXTRA_ARGS: "--size-only --exclude=README.md --metadata '{\"testMeta\": \"$BITBUCKET_COMMIT\"}'"
    

    Esto debería codificar correctamente el valor de --metadata como JSON válido, con la variable $BITBUCKET_COMMIT reemplazada correctamente por su valor.

    Referencia:

Comments are closed.