Gitlab CI,使用带有npm config设置的变量

时间:2018-08-22 20:10:02

标签: gitlab font-awesome gitlab-ci

我正在使用Gitlab设置CI,并且运行良好,只是我需要在脚本命令中使用变量,并且不确定如何做到这一点。我在想像这样的东西

script:
- npm config set "//npm.fontawesome.com/:_authToken" $FONT_AWESOME_KEY

我尝试了其他一些路线,但似乎无法在我要运行的命令中填充变量值。

1 个答案:

答案 0 :(得分:3)

您可以分享变量的来源吗?

您可以通过多种方式将变量获取到CI脚本中:

在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

在CI / CD设置中创建变量

您可以在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

您可能会发现该变量已正确填充。