Gitlab CI,使用带有 npm 配置集的变量

Jef*_*ran 1 gitlab font-awesome gitlab-ci

我正在使用 Gitlab 设置 CI,它运行良好,但我需要在脚本命令中使用变量,但我不确定如何做到这一点。我在想这样的事情

script:
- npm config set "//npm.fontawesome.com/:_authToken" $FONT_AWESOME_KEY
Run Code Online (Sandbox Code Playgroud)

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

JGC*_*JGC 7

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

您可以通过多种方式将变量放入 CI 脚本中:

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

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

stages:
  - build

variables:
  GLOBAL_VARIABLE_1: some value

my job:
  stage: build
  script:
    - echo $GLOBAL_VARIABLE_1
Run Code Online (Sandbox Code Playgroud)

这可以在脚本中用作环境变量$GLOBAL_VARIABLE_1

声明工作变量

与上面类似,但以工作为范围。

stages:
  - build

my job:
  stage: build
  variables:
    JOB_VARIABLE_1: some value
  script:
    - echo $JOB_VARIABLE_1
Run Code Online (Sandbox Code Playgroud)

在脚本部分创建变量

您还可以直接在脚本部分创建变量。这对某些人来说可能很明显,但值得一提的是:

stages:
  - build

my job:
  stage: build
  script:
    - export SCRIPT_VARIABLE_1="some value"
    - echo $SCRIPT_VARIABLE_1
Run Code Online (Sandbox Code Playgroud)

在 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
Run Code Online (Sandbox Code Playgroud)

调试脚本中的变量

当您在脚本中使用变量时,GitLab 不会在运行时显示已解析的命令(您只会看到原始命令)。为了帮助调试,它可以帮助在命令运行之前回显命令,以便您可以看到完全解析的命令。在您的示例中,您可以尝试回显npm命令(请注意,您可能需要引用命令,并转义引号以回显确切的命令):

script:
  - echo "npm config set \"//npm.fontawesome.com/:_authToken\" $FONT_AWESOME_KEY"
  - npm config set "//npm.fontawesome.com/:_authToken" $FONT_AWESOME_KEY
Run Code Online (Sandbox Code Playgroud)

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