我正在使用Gitlab设置CI,并且运行良好,只是我需要在脚本命令中使用变量,并且不确定如何做到这一点。我在想像这样的东西
script:
- npm config set "//npm.fontawesome.com/:_authToken" $FONT_AWESOME_KEY
我尝试了其他一些路线,但似乎无法在我要运行的命令中填充变量值。
答案 0 :(得分:3)
您可以分享变量的来源吗?
您可以通过多种方式将变量获取到CI脚本中:
variables
部分中声明变量。这允许您创建全局变量,该全局变量可用于管道中的所有作业。
stages:
- build
variables:
GLOBAL_VARIABLE_1: some value
my job:
stage: build
script:
- echo $GLOBAL_VARIABLE_1
它可以在脚本中用作环境变量$GLOBAL_VARIABLE_1
。
与上述类似,但以工作为范围。
stages:
- build
my job:
stage: build
variables:
JOB_VARIABLE_1: some value
script:
- echo $JOB_VARIABLE_1
您也可以直接在脚本部分中创建变量。这对于某些人可能是显而易见的,但值得一提:
stages:
- build
my job:
stage: build
script:
- export SCRIPT_VARIABLE_1="some value"
- echo $SCRIPT_VARIABLE_1
您可以在GitLab UI的项目设置> CI / CD 部分中定义变量。向下滚动到秘密变量部分,您将能够定义“键”(变量名)和“值”(变量值)。这些变量将在CI作业中可用。
如果选中受保护的框,则不会在非受保护的分支上运行的管道中定义变量。受保护的变量通常用于敏感的API密钥之类的事情(您不希望所有人的CI文件中都可以看到它们),并且您可能偶尔需要更改它们
包含为完整起见
本机不支持此功能,但可以使用工件来实现。请注意,由于同一阶段中的作业可以并行运行,因此只有将变量从一个阶段的作业传递到下游阶段的作业才有意义。
stages:
- build
- test
build job:
stage: build
script:
- export BUILD_JOB_VAR=123
- echo "$BUILD_JOB_VAR" > build_job_var.txt
artifacts:
paths:
- build_job_var.txt
expire_in: 2 days
test_job:
stage: test
script:
- export BUILD_JOB_VAR="$(cat build_job_var.txt)"
- echo $BUILD_JOB_VAR
在脚本中使用变量时,GitLab不会在运行时显示已解析的命令(您只会看到原始命令)。为了帮助调试,它可以帮助在运行命令之前回显命令,以便您可以看到完全解析的命令。在您的示例中,您可以尝试回显npm
命令(请注意,您可能需要引用该命令,并使用转义引号来回显确切的命令):
script:
- echo "npm config set \"//npm.fontawesome.com/:_authToken\" $FONT_AWESOME_KEY"
- npm config set "//npm.fontawesome.com/:_authToken" $FONT_AWESOME_KEY
您可能会发现该变量已正确填充。