Background: 我有一个存储库,例如example.com以及master和develop分支 . 我的主分支repo通过jenkins build将更改推送到/ efs / prod并开发分支repo通过jenkins build将更改推送到/ efs / qa . 现在我在repo的开发分支中设置了一个文件夹/ s3来将更改推送到亚马逊S3,为此我在jenkins中使用了"Publish Artifacts to S3 Bucket"插件 .
Requirement: 我能够将bitbucket上传移动到aws s3但是当有人在bitbucket repo中删除该文件时,我无法将其与AWS s3同步 . 我已经按照以下来源将repo更改移动到s3
http://www.devops-share.com/upload-builds-from-jenkins-to-s3/
有人能让我知道怎样才能让jenkins将bitbucket repo与S3同步 .
2 回答
一个可能的解决方案是在jenkins实例上安装
aws-cli
,使用aws configure
进行设置,理想情况下通过IAM策略授予其上传到特定S3存储桶的特定权限 .接下来实际上传数据,在jenkins完成处理/构建/编译代码之后,从您要同步到S3的目录中运行以下命令:
aws s3 sync . s3://YOUR_BUCKET_NAME
如果您希望它排除某些目录,请添加
--exclude "folder_name/**"
正如它在
aws-cli
docs中所述:"Recursively copies new and updated files from the source directory to the destination."它不会删除源目录中不存在但存在于存储桶中的文件 .
如果你真的想要这种行为,你可以在每次上传之前吹走存储桶内容,但这会导致停机,所以可能会考虑缓存你的存储桶内容的
CloudFront
设置,你可以在aws s3 sync
成功结束后从Jenkins中清除这个缓存 .要使
CloudFront
缓存无效,请参阅docs我已经在jenkins的Build> Execute shell中使用下面的命令解决了它