我有一个成功的bitbucket管道调用aws CodeDeploy,但我想知道我是否可以添加一个将检查并等待CodeDeploy成功的步骤,否则管道失败。这是否可以通过循环通过CodeDeploy调用的脚本继续监视CodeDeploy推送的状态?知道CodeDeploy会调用什么吗?
到位桶-pipline.yml
image: pitech/gradle-awscli
pipelines:
branches:
develop:
- step:
caches:
- gradle
script:
- gradle build bootRepackage
- mkdir tmp; cp appspec.yml tmp; cp build/libs/thejar*.jar tmp/the.jar; cp -r scripts/ ./tmp/
- pip install awscli --upgrade --user
- aws deploy push --s3-location s3://thebucket/the-deploy.zip --application-name my-staging-app --ignore-hidden-files --source tmp
- aws deploy create-deployment --application-name server-staging --s3-location bucket=staging-codedeploy,key=the-deploy.zip,bundleType=zip --deployment-group-name the-staging --deployment-config-name CodeDeployDefault.AllAtOnce --file-exists-behavior=OVERWRITE
appspec.yml
version: 0.0
os: linux
files:
- source: thejar.jar
destination: /home/ec2-user/the-server/
permissions:
- object: /
pattern: "**"
owner: ec2-user
group: ec2-user
hooks:
ApplicationStop:
- location: scripts/server_stop.sh
timeout: 60
runas: ec2-user
ApplicationStart:
- location: scripts/server_start.sh
timeout: 60
runas: ec2-user
ValidateService:
- location: scripts/server_validate.sh
timeout: 120
runas: ec2-user
不幸的是,Bitbucket似乎并没有等待ValidateService完成,所以在标记构建成功之前我需要在Bitbucket中确认一下。
答案 0 :(得分:2)
AWS CLI已经具有deployment-successful
方法,该方法每15秒检查一次部署状态。您只需要将create-deployment
的输出传递到deployment-successful
。
在您的特定情况下,它应如下所示:
image: pitech/gradle-awscli
pipelines:
branches:
develop:
- step:
caches:
- gradle
script:
- gradle build bootRepackage
- mkdir tmp; cp appspec.yml tmp; cp build/libs/thejar*.jar tmp/the.jar; cp -r scripts/ ./tmp/
- pip install awscli --upgrade --user
- aws deploy push --s3-location s3://thebucket/the-deploy.zip --application-name my-staging-app --ignore-hidden-files --source tmp
- aws deploy create-deployment --application-name server-staging --s3-location bucket=staging-codedeploy,key=the-deploy.zip,bundleType=zip --deployment-group-name the-staging --deployment-config-name CodeDeployDefault.AllAtOnce --file-exists-behavior=OVERWRITE > deployment.json
- aws deploy wait deployment-successful --cli-input-json file://deployment.json
答案 1 :(得分:0)
aws deploy create-deployment
是一个异步调用,而BitBucket并不知道它需要了解部署的成功与否。将代码添加到CodeDeploy应用程序对BitBucket了解您的部署没有任何影响。
您有一个(可能是两个)选项来解决此问题。
您需要向BitBucket管道添加脚本,以检查要完成的部署状态。您可以使用SNS通知,也可以直接轮询CodeDeploy服务。
伪代码看起来像这样:
loop
check_if_deployment_complete
if false, wait and retry
if true && deployment successful, return 0 (success)
if true && deployment failed, return non-zero (failure)
您可以使用AWS CLI或您喜欢的脚本语言。在bitbucket-pipline.yml
脚本的末尾添加它。确保在调用CodeDeploy之间等待检查状态。
BitBucket直接与AWS CodeDeploy集成,因此您可以使用它们的集成而不是脚本来正确集成。我不知道这是否得到支持。