【问题标题】:Unable to deploy code using CodeDeploy无法使用 CodeDeploy 部署代码
【发布时间】:2016-09-13 10:10:56
【问题描述】:

我正在尝试使用 CodeDeploy 部署我的应用程序,但每次遇到Deployment Failed 消息,并附有附加信息:No hosts succeeded. (Error code: HEALTH_CONSTRAINTS)

我不明白这是为什么。以下是按顺序执行的步骤:

  • 我使用 IAM 角色启动了实例,该角色附加了 2 个策略 AmazonEC2FullAccessAmazonS3FullAccess。后面的政策建议如下:

     {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "s3:*",
          "Resource": "*"
        }
      ]
    }
    
  • 从 aws 控制台启动实例时,我在高级部分指定了以下内容:(作为文本选择)

    apt-get -y update
    apt-get -y install awscli
    apt-get -y install ruby2.0
    cd /home/ubuntu
    aws s3 cp s3://aws-codedeploy-us-west-2/latest/install . --region us-west-2
    chmod +x ./install
    ./install auto
    
  • 为了推送代码,我写道:

    aws deploy push --application-name CDTestApp --s3-location s3://codedeploy-test-bucket-pc/PC.zip --source PulsarCloud/
    
  • 为了部署,我写道:

    aws deploy create-deployment --application-name CDTestApp --s3-location bucket=codedeploy-test-bucket-pc,key=PC.zip,bundleType
    zip,eTag="834db424710b1819b753444460dd361d" --deployment-group-name CDGroup 
    --deployment-config-name CodeDeployDefault.OneAtATime  --description 
    MyTestApplication
    
  • 我得到了deployment id 作为回报。

  • 一段时间后,部署失败!

  • appspec.yml:

    version: 0.0
    
    os: linux 
    
    files:
    - source: /sdk/js/index.html
      destination: /var/www/html
    
    hooks:
     BeforeInstall:
      - location: /installerassets/installer.sh
        timeout: 6000
        runas: root
    

这可能是什么原因?

当我登录机器并进入时:

sudo service codedeploy-agent status

我得到了:codedeploy-agent: unrecognized service

但后来我尝试使用步骤here 重新安装它。服务正在运行,但无法部署代码。

【问题讨论】:

  • 代理是否在运行?你的最后几句话不清楚。你让sudo service codedeploy-agent status 工作了吗?

标签: ubuntu amazon-web-services amazon-s3 amazon-ec2 aws-code-deploy


【解决方案1】:

有几点需要指出:

  • (仅出于完整性检查目的),发布的角色只有 s3,但没有 ec2?
  • codedeploy.amazonaws.com 是否包含在角色的信任关系中?
  • 要安装代理,应使用 sudo ./install auto

无法识别 codedeploy-agent 的事实意味着未安装代理。这可能是因为没有使用 sudo。

解释您看到的错误代码: HEALTH_CONSTRAINT 违反意味着使用默认的一一部署配置。当第一个实例的部署失败时,会违反最小健康实例限制(即 1),因此,部署将失败。

【讨论】:

    【解决方案2】:

    另外,确认已安装 codedeploy 代理后,请确保
    1. EC2 实例有权从推送修订的 s3 存储桶中获取数据
    2. Codedeploy 服务角色也附有以下政策:

         {
           "Version": "2012-10-17",
           "Statement": [
             {
               "Effect": "Allow",
               "Action": [
                 "ec2:DescribeInstances",
                 "ec2:DescribeInstanceStatus",
                 "tag:GetTags",
                 "tag:GetResources"
               ],
               "Resource": "*"
             }
           ]
         }
    

    3。正确标记 EC2 实例并在 codedeploy 中提供相同的键值对

    【讨论】:

      猜你喜欢
      • 2021-10-19
      • 2019-09-21
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 2018-12-05
      • 2020-05-11
      • 2020-02-17
      • 1970-01-01
      相关资源
      最近更新 更多