gitlab - Gitlab CI,使用带有 npm 配置集的变量
问题描述
我正在用 Gitlab 设置 CI,它工作得很好,除了我需要在脚本命令中使用一个变量,我不确定我该怎么做。我在想这样的事情
script:
- npm config set "//npm.fontawesome.com/:_authToken" $FONT_AWESOME_KEY
我尝试了其他一些路线,但似乎无法让变量值填充到我要运行的命令中。
解决方案
你能分享你的变量来自哪里吗?
您有多种方法可以将变量导入 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
您可能会发现该变量已正确填充。
推荐阅读
- javascript - 如何在制表器中显示详细程序?
- minikube - minikube 的客户端证书生成问题
- java - 如何修复java中扫描仪中未分配变量的错误
- c# - 无法使用 VS 调试 Outlook 加载项
- javascript - 如何将导航栏显示设置从 flex 更改为 block 以实现响应式显示?
- python - 无法转换
脱颖而出 - python - 通过相同的索引访问 dict 键和列表元素以循环并分配值
- javascript - 分隔符与换行符之间字符串的正确正则表达式是什么
- python - 想要一个 pandas Series of Trips Completed to count(Request) ratio for each hour 作为给定数据帧的索引
- python-3.x - 转置数据框后如何合并具有相同标签的所有列?