Как создать переменную массива, используемую в качестве аргумента скрипта в файле yaml Gitlab CI? - PullRequest
0 голосов
/ 28 сентября 2019

Я пытаюсь выяснить, как объявить переменную, которая является массивом, и использовать ее в качестве аргументов, передаваемых сценарию оболочки.Или узнайте, как быть немного более СУХИМ, научившись

Вот то, что я пробовал, вызывает /bin/sh: eval: line X: syntax error: bad substitution:

variables:
  EXTRA_ARGS: (. "${CI_COMMIT_SHORT_SHA} pipeline-${CI_PIPELINE_ID} latest" "pipeline-${CI_PIPELINE_ID}" $CI_COMMIT_REF_NAME $CI_COMMIT_REF_SLUG)

build:
  stage: build
  script:
    - path/to/script.sh uniqueParam1 uniqueParam2 ${EXTRA_ARGS[@]}
    - path/to/script.sh uniqueParam3 uniqueParam4 ${EXTRA_ARGS[@]}
    - path/to/script.sh uniqueParam5 uniqueParam6 ${EXTRA_ARGS[@]}

И последующие действия выполняются нормально, но, как вы можетескажите, я повторяю дополнительные аргументы:

build:
  stage: build
  script:
    - path/to/script.sh uniqueParam1 uniqueParam2 . "${CI_COMMIT_SHORT_SHA} pipeline-${CI_PIPELINE_ID} latest" "pipeline-${CI_PIPELINE_ID}" $CI_COMMIT_REF_NAME $CI_COMMIT_REF_SLUG
    - path/to/script.sh uniqueParam3 uniqueParam4 . "${CI_COMMIT_SHORT_SHA} pipeline-${CI_PIPELINE_ID} latest" "pipeline-${CI_PIPELINE_ID}" $CI_COMMIT_REF_NAME $CI_COMMIT_REF_SLUG
    - path/to/script.sh uniqueParam5 uniqueParam6 . "${CI_COMMIT_SHORT_SHA} pipeline-${CI_PIPELINE_ID} latest" "pipeline-${CI_PIPELINE_ID}" $CI_COMMIT_REF_NAME $CI_COMMIT_REF_SLUG

Я также пытался удалить точку . в качестве аргумента, но ошибка сохраняется.

Ради меняЯ попытался запустить концепцию в bash и с успехом выполнил следующее:

#!/bin/bash

TEST1="Hello"
TEST2="human!"

ARGS=(. $TEST1 $TEST2 "${TEST2} ${TEST1}" "param1" "param2")

echo "${ARGS[*]}"

Выводы:

. Hello human! human! Hello param1 param2

Также попытался вставить его в сценарии как:

script:
  - EXTRA_ARGS=(. "${CI_COMMIT_SHORT_SHA} pipeline-${CI_PIPELINE_ID} latest" "pipeline-${CI_PIPELINE_ID}" $CI_COMMIT_REF_NAME $CI_COMMIT_REF_SLUG)

А также не работает:

/bin/sh: eval: line 92: syntax error: unexpected "("

Также пытался сбежать \(, но не сработало.

Любые подсказки приветствуются!

1 Ответ

0 голосов
/ 28 сентября 2019

Как указано в первом комментарии, проблема связана с образом Docker, основанным на Alpine, который по умолчанию имеет оболочку bourne, а не bash.

https://gitlab.com/gitlab-org/gitlab-runner/issues/1758

...