amazon-web-services - AWS s3 cp 无法从 gitlab 构建中找到文件?
问题描述
我正在开发一个 Gitlab CI 项目,我必须将 APK 推送到我们的 aws S3 存储桶,因为我已经在存储库的项目设置中指定了环境变量中的键,现在这是我的gitlab-ci.yml
文件:
stages:
- build
- deploy
variables:
AWS_DEFAULT_REGION: us-east-2 # The region of our S3 bucket
BUCKET_NAME: abc.bycket.info # bucket name
FILE_NAME: ConfuRefac.apk
assembleDebug:
stage: build
script:
- export ANDROID_HOME=/home/bitnami/android-sdk-linux
- export ANDROID_NDK_HOME=/opt/android-ndk
- export PATH=$PATH:/home/bitnami/android-sdk-linux/platform-tools/
- export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
- export PATH=/usr/lib/jvm/java-1.8.0-openjdk-amd64/bin:$PATH
- chmod +x ./gradlew
- ./gradlew assembleDebug
- cd app/build/outputs/apk/debug
- mv app-debug.apk ${FILE_NAME}
artifacts:
paths:
- app/build/outputs/apk/debug/${FILE_NAME}
deploys3:
image: "python:latest" # We use python because there is a well-working AWS Sdk
stage: deploy
dependencies:
- assembleDebug
script:
- pip install awscli
- cd app/build/outputs/apk/debug/
- ls && pwd
- aws s3 cp ${FILE_NAME} s3://${BUCKET_NAME}/${FILE_NAME} --recursive
ls
因此,当部署阶段开始启动时,即使您可以清楚地看到该文件确实存在,它也找不到该文件。
Collecting futures<4.0.0,>=2.2.0; python_version == "2.7" (from s3transfer<0.4.0,>=0.3.0->awscli)
Using cached https://files.pythonhosted.org/packages/d8/a6/f46ae3f1da0cd4361c344888f59ec2f5785e69c872e175a748ef6071cdb5/futures-3.3.0-py2-none-any.whl
Collecting six>=1.5 (from python-dateutil<3.0.0,>=2.1->botocore==1.16.13->awscli)
Using cached https://files.pythonhosted.org/packages/65/eb/1f97cb97bfc2390a276969c6fae16075da282f5058082d4cb10c6c5c1dba/six-1.14.0-py2.py3-none-any.whl
Installing collected packages: urllib3, docutils, jmespath, six, python-dateutil, botocore, pyasn1, rsa, futures, s3transfer, PyYAML, colorama, awscli
Successfully installed PyYAML-5.3.1 awscli-1.18.63 botocore-1.16.13 colorama-0.4.3 docutils-0.15.2 futures-3.3.0 jmespath-0.10.0 pyasn1-0.4.8 python-dateutil-2.8.1 rsa-3.4.2 s3transfer-0.3.3 six-1.14.0 urllib3-1.25.9
You are using pip version 8.1.1, however version 20.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
$ cd ${PWD}/app/build/outputs/apk/debug/
$ ls && pwd
ConfuRefac.apk
/home/gitlab-runner/builds/CeGhSYCJ/0/root/confu-android/app/build/outputs/apk/debug
$ aws s3 cp ${PWD}/${FILE_NAME} s3://${BUCKET_NAME}/${FILE_NAME} --recursive
warning: Skipping file /home/gitlab-runner/builds/CeGhSYCJ/0/root/confu-android/app/build/outputs/apk/debug/ConfuRefac.apk/. File does not exist.
Running after_script
00:00
Uploading artifacts for failed job
00:01
ERROR: Job failed: exit status 1
解决方案
正如我在评论中指出的那样,问题是由于--recursive
将 ${FILE_NAME} 视为目录而不是文件而引起的。
这当然是有道理的,因为不能递归地复制单个文件。
推荐阅读
- css - 为什么 CSS 在 `npm run dev` 和 `npm run build` 之间呈现不同?
- c# - C# WPF 中的占位符文本框 - 无法绑定 DepedencyProperty
- android - 使用自定义仪器未找到仪器测试 - 条件仪器?
- swift - Swift:如何避免在所有继承类中重写这个 init()?
- jenkins - 无法通过 Jenkins 将笑话测试用例报告发布到 SonarQube 6.1 和 SonarScanner 3.3
- r - 将矩阵从 288*2 转换为 48*6
- react-native - 如何使用 Detox 关闭 SKStoreReview
- angular - API响应错误时如何在Angular Interceptor中获取所有http响应
- sql - 从 xmltype/soap oracle 中提取值
- azure-active-directory - 如何从活动目录令牌生成用户访问令牌?