设置 CodePipeline - 部署步骤的状态为失败

2023-12-14

设置 CodeDeploy 时如下本教程,在Setup CodePipeline的最后一步下

Deploy step has a status of failed

如果我单击“失败”下的“详细信息”

Action execution failed

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

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

Link to execution details

这很可能是由于位置问题造成的 - 有时使用弗吉尼亚北部,有时使用伦敦。

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

因此,我转到 CodeDeploy,删除了弗吉尼亚北部的应用程序,并在伦敦创建了一个部署组。然后,在伦敦建立了一条新管道。

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

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

deployment failed because too many individual instances failed deployment

为了解决这个问题,我删除了两个管道并创建了一个新管道。由于我必须改变角色,所以我使用了AWSCodePipelineServiceRole-eu-west-2-CodeDeployLightsailDemoPipeline但这在创建管道时给我带来了麻烦

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

Could not create role

所以,我把它改成了AWSCodePipelineServiceRole-eu-west-2-CodeDeployLightsailDemoP。然后,这让我陷入了另一个问题

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

Duplicate names are not allowed

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

这让我陷入了同样的境地

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

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

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

View Events

根据Marcin,我应该找到应用程序规范.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 path

No such path as /var/www/html

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

SSH and folders

并重新启动部署

Restart deployment

但它像以前一样失败了。

如何使部署状态变为成功?


Edit

根据文档,此错误代码显示健康限制。所以,我现在正在阅读:

  • 实例健康状况
  • 排查实例问题
  • 排查 EC2/本地部署问题

根据评论:

在试图复制这个问题,我部署了应用程序代码部署GitHub演示OP 在我自己的 Amazon Linux 2 实例上通过 CodeDeploy 使用。我可以verifiedCodeDeployGitHubDemo和它的appspec.yml文件正确并且按预期工作。

由于OP正在使用CodePipeline(CP),因此建议退一步仅专注于使用 CodeDeploy (CD) 进行部署,而不会增加使用 CP + CD 组合的复杂性。这样可以只关注 CD 问题,并且可以简化查找问题根本原因的过程。一旦独立 CD 部署成功,下一步就是将 CP 合并到部署过程中,并准确了解应该如何设置 CD 才能工作。


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

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

    1.1.删除了 1 个角色 (CodeDeployServiceRole)。

    1.2.创建了服务角色。

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

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

    2.2.在 EU London (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.创建了一个新用户(请注意,它需要有不同的名称,否则会得到这个问题).

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

    5.1.删除了以前的实例(codedeploy)。

    5.2.使用 Amazon Linux (Amazon_Linux_1) 创建了一个新实例(请注意,如果使用 Amazon Linux 2,则将达到这个问题),

使用脚本

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.

Run

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

Then

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

Then

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.删除应用程序(CodeDeploy Lightsail 演示)。

    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.使用“新服务角色”创建新管道。

It worked

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设置 CodePipeline - 部署步骤的状态为失败 的相关文章

随机推荐