如何在Bitbucket Pipeline中执行步骤之前增加等待时间

时间:2019-05-21 04:44:58

标签: amazon-web-services bitbucket amazon-cloudformation devops bitbucket-pipelines

我有一个Bitbucket管道,它在其中使用cloudformation创建AWS资源并向其部署网站。但是,即使cloudformation正确创建堆栈,部署也会失败。我认为问题在于部署何时进行,云形成S3存储桶创建可能尚未完成。

我有一个Hugo网站,我创建了一个Bitbucket管道将其部署到服务器。它的作用是使用cloudformation创建S3存储桶以托管网站,然后将Hugo网站上传到该网站。当我在终端中手动运行管道中的步骤并在每个步骤之间有延迟时,它会成功发生。但是,当它发生在Bitbucket管道上时,它给出了错误,表示我尝试上传内容的S3存储桶不可用。当我签入AWS时,该存储桶实际上在那里。这意味着Cloudformation已经正常工作。但是,当文件开始复制时,存储桶可能无法上载文件。那是我的假设。有没有一种解决方法。当在本地执行时,我可以在创建云信息和复制文件这两个命令之间等待。但是如何在Bitbucket管道环境中处理它。以下是我的管道代码。

pipelines:
  pull-requests:
    '**':
      - step:
          script:
            - aws cloudformation create-stack --stack-name demo-web --template-body file://cloudformation.json --parameters ParameterKey=S3BucketName,ParameterValue=demo-web
            - hugo
            - aws s3 cp public/ s3://demo-web/ --recursive

如何以正确的方式处理这种情况。有没有针对这种情况的解决方法。还是我确定的问题不是实际问题。

2 个答案:

答案 0 :(得分:1)

首先,要在位桶管道中等待,您应该可以只使用sleep x,其中x是您要休眠的秒数。

另一注-请记住,在此后的第一次运行之后,下次使用create-stack时部署可能会失败,如果堆栈已经存在,部署将会失败...

答案 1 :(得分:0)

为此,使用AWS CloudFormation API是最佳实践。

有一个wait命令,就像有一个create-stack命令一样,wait命令及其选项允许AWS暂停处理,直到堆栈处于COMPLETE状态,然后再继续。< / p>

选项1: 将堆栈创建命令放入Shell脚本中,然后在第二步中调用wait stack-create-complete命令。

然后在管道中而不是直接命令中调用该shell脚本。

选项2: 在bitbucket管道中,在创建命令之后,立即在上载/雨果命令之前调用aws cloudformation await complete命令。

我更喜欢选项一,因为它允许您根据需要操纵和跟踪创建。

请参阅文档:https://docs.aws.amazon.com/cli/latest/reference/cloudformation/wait/stack-create-complete.html

使用CloudFormation APU很棒,因为您不必猜测要等待多长时间,因此可以保证它可用。