如何在Gitlab CI yaml文件中创建用作脚本参数的数组变量?

时间:2019-09-27 22:21:09

标签: shell gitlab-ci

我试图弄清楚如何声明一个数组变量,并将其用作传递给shell脚本的参数。或通过学习

来了解如何使DRY更加干燥

这是我尝试导致/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 :(得分:0)

第一条评论指出,该问题与基于Alpine的Docker映像有关,该映像具有bourne shell,默认情况下不包含bash。

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