【问题标题】:Setup CodePipeline - Deploy step has a status of failed设置 CodePipeline - 部署步骤的状态为失败
【发布时间】:2021-01-16 23:03:41
【问题描述】:

this tutorial 之后设置 CodeDeploy 时,在设置 CodePipeline 的最后一步下

如果我点击失败下的详细信息

如果我点击链接到执行详细信息

部署失败,因为找不到您的实例 部署组。检查您的部署组设置以确保 您的 Amazon EC2 实例或 Auto Scaling 组的标签 正确识别您要部署到的实例,然后尝试 再次。

这很可能是由于地点的问题 - 有时是在弗吉尼亚北部,有时在伦敦。

  • IAM - 不需要选择区域。
  • S3 - 不需要区域选择。
  • LightSail 实例 - 伦敦,A 区 (eu-west-2a)
  • CodeDeploy 应用程序 - 弗吉尼亚北部 (us-east-1)
  • CodeDeploy 管道 - 伦敦,A 区 (eu-west-2a)

所以,我去了 CodeDeploy,删除了弗吉尼亚北部的应用程序,并在伦敦的部署组中创建了一个。然后,在伦敦创建了一条新管道。

这次部署也失败了,但原因不同

整体部署失败,因为单个实例太多 部署失败,可用的健康实例太少 部署,或者您的部署组中的某些实例是 遇到问题。

为了解决这个问题,我删除了两个管道并创建了一个新管道。由于我不得不改变角色,我使用了AWSCodePipelineServiceRole-eu-west-2-CodeDeployLightsailDemoPipeline,但这让我在创建管道时遇到了麻烦

无法创建角色 AWSCodePipelineServiceRole-eu-west-2-CodeDeployLightsailDemoPipeline

所以,我将其更改为 AWSCodePipelineServiceRole-eu-west-2-CodeDeployLightsailDemoP。然后,这让我陷入了另一个问题

一个名为 AWSCodePipelineServiceRole-eu-west-2-CodeDeployLightsailDemoPipeline 已经存在。不允许重复名称。

所以,我回去将管道名称更改为CodeDeployLightsailDemoPi,并将角色名称更改为AWSCodePipelineServiceRole-eu-west-2-CodeDeployLightsailDemoPi

这让我陷入了同样的境地

整体部署失败,因为单个实例太多 部署失败,可用的健康实例太少 部署,或者您的部署组中的某些实例是 遇到问题。

我决定等待 30 分钟,然后创建一个新管道,将其命名为 CodeDeployLightsailPipeline 和角色名称 AWSCodePipelineServiceRole-eu-west-2-CodeDeployLightsailPipelin,但同样的问题发生了。

这是部署 ID > 查看事件中显示的信息

根据Marcin,我应该找到appspec.yml

version: 0.0
os: linux
files:
  - source: /index.html
    destination: /var/www/html/
hooks:
  BeforeInstall:
    - location: scripts/install_dependencies
      timeout: 300
      runas: root
    - location: scripts/start_server
      timeout: 300
      runas: root
  ApplicationStop:
    - location: scripts/stop_server
      timeout: 300
      runas: root

在其中,它提到了destination: /var/www/html/,但在实例中没有这样的/var/www/html 路径

所以,我在其中创建了这两个文件夹

并重新开始部署

但它像以前一样失败了。

我怎样才能让部署状态成功?


编辑

根据the documentation,此错误代码显示HEALTH_CONSTRAINTS。所以,我现在正在阅读:

【问题讨论】:

  • 你的 appspec 文件是什么?
  • @Marcin 我不必创建一个。如果它是在过程中的任何地方自动创建的,我无法找到它。
  • SSH 进入并运行 sudo find / -name "appspec" 但它没有返回任何内容
  • CodeDeployGitHubDemo 很好。我刚刚使用 CodeDeploy 部署它以尝试对其进行测试。尽管我使用的是常规的 Amazon Linux 2 实例,而不是 Lightsale,但我认为 repo 不是这里的问题。也许你必须退后一步。您能否仅使用 CodeDeploy 进行部署,而不使用任何管道?从 github 获取代码,将其打包成 zip 并使用 codedeploy 从 S3 进行部署。这就是我所做的。
  • @Marcin 随意将其写为答案,然后我将对其进行编辑以包含有关已完成操作的更多详细信息。特别是,您可以突出显示“您必须退后一步”。成功了!

标签: amazon-web-services deployment aws-code-deploy amazon-lightsail


【解决方案1】:

基于 cmets:

为了重现该问题,我使用 CodeDeploy 在我自己的 Amazon Linux 2 实例上部署了 OP 使用的应用程序 CodeDeployGitHubDemo。我可以验证CodeDeployGitHubDemo 及其appspec.yml 文件正确且按预期工作。

由于 OP 使用的是 CodePipline (CP),因此建议后退一步,只专注于使用 CodeDeploy (CD) 进行部署,而不会增加使用 CP + CD 组合的复杂性。这允许只关注 CD 问题,并且应该简化查找问题的根本原因。独立 CD 部署工作后,下一步就是将 CP 纳入部署过程,确切了解 CD 应如何设置才能工作。


更具体地说,就是这样做的

  1. 在 IAM 控制台https://console.aws.amazon.com/iam/

    1.1。删除了一个角色 (CodeDeployServiceRole)。

    1.2。创建了一个服务角色。

  2. 在 S3 控制台中https://console.aws.amazon.com/s3/

    2.1。清空并删除了一个存储桶(tiagocodedeploylightsailbucket)。

    2.2。在欧盟伦敦 (eu-west-2) 创建了一个新存储桶。

  3. 返回 IAM 控制台https://console.aws.amazon.com/iam/

    3.1。删除了一项策略 (CodeDeployS3BucketPolicy)。

    3.2。创建了新策略。

  4. 留在 IAM 控制台https://console.aws.amazon.com/iam/

    4.1。删除一个用户(LightSailCodeDeployUser)

    4.2。创建了一个新用户(注意它需要有一个不同的名字,否则会得到this problem)。

  5. 导航到 Lightsail 主页https://lightsail.aws.amazon.com/

    5.1。删除了以前的实例(编码部署)。

    5.2。使用 Amazon Linux (Amazon_Linux_1) 创建了一个新实例(请注意,如果使用 Amazon Linux 2 则将达到 this problem),

使用脚本

mkdir /etc/codedeploy-agent/

mkdir /etc/codedeploy-agent/conf

cat <<EOT >> /etc/codedeploy-agent/conf/codedeploy.onpremises.yml

---

aws_access_key_id: ACCESS_KEY

aws_secret_access_key: SECRET_KEY

iam_user_arn: arn:aws:iam::525221857828:user/GeneralUser

region: eu-west-2

EOT

wget https://aws-codedeploy-us-west-2.s3.us-west-2.amazonaws.com/latest/install

chmod +x ./install

sudo ./install auto
  1. 两种情况下的 SSH

    6.1。验证 codedeploy-agent 是否正在运行 (sudo service codedeploy-agent status)

  2. 在本地计算机上使用 AWS CLI 在 PowerShell 中

    7.1.

运行

aws deploy register-on-premises-instance --instance-name Amazon_Linux_1 --iam-user-arn arn:aws:iam::525221857828:user/GeneralUser --region eu-west-2

然后

aws deploy add-tags-to-on-premises-instances --instance-names Amazon_Linux_1 --tags Key=Name,Value=CodeDeployLightsailDemo --region eu-west-2

然后

aws deploy list-on-premises-instances --region eu-west-2

最后得到了输出

{
    "instanceNames": [
        "Amazon_Linux_1",
        "codedeploy"
    ]
}
  1. 导航到 CodeDeploy 控制台https://eu-west-2.console.aws.amazon.com/codesuite/codedeploy/start?region=eu-west-2#

    8.1。删除应用程序 (CodeDeployLightsailDemo)。

    8.2。使用新部署组 (CodeDeployLightsailDemoDeploymentGroup) 创建一个新应用程序。

  2. 导航到 CodePipeline 控制台https://eu-west-2.console.aws.amazon.com/codesuite/codepipeline/start?region=eu-west-2

    9.1。删除管道 (CodeDeployLightsailDemoPipeline)。

    9.2。使用“新服务角色”创建新管道。

【讨论】:

    猜你喜欢
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2020-06-13
    相关资源
    最近更新 更多