无法找到凭据--Gitlab Pipeline for S3

Kat*_*a24 6 amazon-s3 gitlab gitlab-ci

我正通过Gitlab管道将我网站的前端部署到亚马逊s3.我以前的部署已成功运行,但最近的部署却没有.这是错误:

Completed 12.3 MiB/20.2 MiB (0 Bytes/s) with 1 file(s) remaining
upload failed: dist/vendor.bundle.js.map to s3://<my-s3-bucket-name>/vendor.bundle.js.map Unable to locate credentials
Run Code Online (Sandbox Code Playgroud)

根据我的秘密变量,我定义了四个.它们是(AWS_ACCESS_KEY_ID & AWS_SECRET_ACCESS_KEY)两个不同存储桶的S3凭证变量.一对用于测试分支,另一对用于生产分支.

不 - 生产环境变量受到保护而其他变量则不受保护.这是我运行的部署脚本:

#/bin/bash
#upload files
aws s3 cp ./dist s3://my-url-$1 --recursive --acl public-read
Run Code Online (Sandbox Code Playgroud)

那么为什么我得到这个凭据位置错误?当然它应该自动获取环境变量(未受保护的变量)并部署它们.我是否需要在作业中定义变量并参考它们?

Rtm*_*tmY 14

(我多次遇到这个问题 - 为有相同错误的人添加另一个答案 - 出于其他原因)。

快速检查清单。

转到设置 -> CI/CD -> 变量并检查:

  1. 如果AWS_ACCESS_KEY_ID&AWS_SECRET_ACCESS_KEY环境变量都存在。
  2. 如果两个名字都拼写正确。
  3. 如果它们的状态定义为protected- 它们只能针对protected分支运行(如master)。

如果仍然出现错误:

  1. 确保访问密钥仍然存在并在您的帐户中处于活动状态。
  2. 删除当前环境变量并用新生成的访问密钥替换它们,并确保AWS_SECRET_ACCESS_KEY不包含任何特殊字符(可能导致奇怪的错误)。

  • 第三点是我的问题...我的分支没有受到保护,而 env 变量设置为受保护 (4认同)

Kat*_*a24 4

实际的问题是与命名变量有关的冲突。对于这两个分支,变量被称为AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY。然而,问题不仅仅是重命名它们,因为管道仍然没有拾取它们。

我将密码打印到日志中,以确定哪个密码被哪个分支获取,但发现两者都没有被占用。解决方案是为每个分支的每个密码指定一个唯一的名称(例如PRODUCTION_ACCESS_KEY_IDTESTING_ACCESS_KEY_ID),并在构建脚本中引用它们:

deploy_app_production:
  environment: 
    name: production
    url: <url>
  before_script:
    - echo "Installing ruby & dpl"
    - apt-get update && apt-get install -y ruby-full
    - gem install dpl
  stage: deploy
  tags:
    - nv1
  script:
    - echo "Deploying to production"
    - sh deploy.sh production $PRODUCTION_ACCESS_KEY_ID $PRODUCTION_SECRET_ACCESS_KEY
  only:
    - master
Run Code Online (Sandbox Code Playgroud)

deploy.sh我提到了传入的变量(尽管我最终切换到dpl):

dpl --provider=s3 --access-key-id=$2 --secret-access-key=$3 --bucket=<my-bucket-name>-$1 --region=eu-west-1 --acl=public_read --local-dir=./dist --skip_cleanup=true
Run Code Online (Sandbox Code Playgroud)