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 -> 变量并检查:
AWS_ACCESS_KEY_ID&AWS_SECRET_ACCESS_KEY环境变量都存在。protected- 它们只能针对protected分支运行(如master)。如果仍然出现错误:
AWS_SECRET_ACCESS_KEY不包含任何特殊字符(可能导致奇怪的错误)。实际的问题是与命名变量有关的冲突。对于这两个分支,变量被称为AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY。然而,问题不仅仅是重命名它们,因为管道仍然没有拾取它们。
我将密码打印到日志中,以确定哪个密码被哪个分支获取,但发现两者都没有被占用。解决方案是为每个分支的每个密码指定一个唯一的名称(例如PRODUCTION_ACCESS_KEY_ID和TESTING_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)
| 归档时间: |
|
| 查看次数: |
1746 次 |
| 最近记录: |