首页 > 解决方案 > Gitlab CI,使用带有 npm 配置集的变量

问题描述

我正在用 Gitlab 设置 CI,它工作得很好,除了我需要在脚本命令中使用一个变量,我不确定我该怎么做。我在想这样的事情

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

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

标签: gitlabfont-awesomegitlab-ci

解决方案


你能分享你的变量来自哪里吗?

您有多种方法可以将变量导入 CI 脚本:

variables在 CI 文件的某个部分中声明变量。

这允许您创建全局变量,可用于管道中的所有作业。

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部分中定义变量。向下滚动到Secret variables部分,您将能够定义“key”(变量名)和“value”(变量值)。这些变量将在 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

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


推荐阅读