如何在DroneCI流水线中新增步骤,将文件及镜像上传至AWS S3?
改造DroneCI流水线实现S3文件上传与ECR镜像推送
以下是满足需求的完整DroneCI流水线配置,包含指定JS文件上传、镜像文件上传到S3,以及原有的ECR镜像推送步骤:
kind: pipeline type: docker name: default steps: # 步骤1:推送指定JS文件到S3(ECR推送前执行) - name: upload-js-file-to-s3 image: amazon/aws-cli environment: AWS_ACCESS_KEY_ID: from_secret: aws_access_key_id AWS_SECRET_ACCESS_KEY: from_secret: aws_secret_access_key AWS_REGION: us-east-1 # 替换为你的AWS区域 S3_BUCKET: your-s3-bucket-name # 替换为你的S3桶名 JS_FILE_PATH: /test/bundle_file/my_file.js commands: - aws s3 cp $JS_FILE_PATH s3://$S3_BUCKET/path/to/destination/ # 替换为S3目标目录 # 步骤2:构建镜像并导出为tar文件 - name: build-and-save-image image: docker:dind volumes: - name: docker-sock path: /var/run/docker.sock commands: - docker build -t your-ecr-repo-uri:latest . # 替换为你的ECR仓库URI - docker save -o app-image.tar your-ecr-repo-uri:latest # 导出镜像为tar包 # 步骤3:上传镜像tar文件到S3 - name: upload-image-to-s3 image: amazon/aws-cli environment: AWS_ACCESS_KEY_ID: from_secret: aws_access_key_id AWS_SECRET_ACCESS_KEY: from_secret: aws_secret_access_key AWS_REGION: us-east-1 # 替换为你的AWS区域 S3_BUCKET: your-s3-bucket-name # 替换为你的S3桶名 commands: - aws s3 cp app-image.tar s3://$S3_BUCKET/images/ # 替换为S3镜像存储目录 # 步骤4:推送镜像到ECR(原有的步骤) - name: push-to-ecr image: plugins/ecr settings: access_key: from_secret: aws_access_key_id secret_key: from_secret: aws_secret_access_key repo: your-ecr-repo-name # 替换为你的ECR仓库名 region: us-east-1 # 替换为你的AWS区域 tags: latest volumes: - name: docker-sock host: path: /var/run/docker.sock
关键说明:
- 权限配置:确保Drone中已添加
aws_access_key_id和aws_secret_access_key两个secret,且对应的AWS账号拥有S3写入和ECR推送权限 - 占位符替换:将配置中所有
your-xxx占位符替换为实际的AWS资源信息 - 执行顺序:通过步骤定义顺序保证JS文件上传在ECR推送前完成,镜像构建导出后再上传到S3
- 镜像导出:使用
docker save命令将镜像导出为tar包,方便上传到S3;如果不需要保留本地tar包,可在上传后添加rm app-image.tar命令清理
内容的提问来源于stack exchange,提问作者Jay Modi
相关产品推荐
相关产品推荐

