代码之家  ›  专栏  ›  技术社区  ›  krismath maasg

Codepipeline ECS蓝色/绿色没有从两个源获取输入工件

  •  0
  • krismath maasg  · 技术社区  · 5 年前

    我有一个代码管道,它使用ECS蓝/绿部署操作将ECR映像部署到ECS集群。管道包含两个源:一个用于使用AWS ECR操作的ECR映像,另一个用于使用第三方Github操作从Github获取配置。ECR动作输出 image config 神器。这两个工件都作为ECS蓝/绿部署操作的输入提供。

    无效的操作配置

    尝试从以下位置读取任务定义项目文件时发生异常:config

    以下是管道的结构(为匿名性编辑了一些详细信息):

    $ aws codepipeline get-pipeline --name my-codepipeline
    {
      "pipeline": {
        "name": "my-codepipeline",
        "roleArn": "arn:aws:iam::123456789000:role/my-codepipeline-role",
        "artifactStore": {
          "type": "S3",
          "location": "my-codepipeline-s3"
        },
        "stages": [
          {
            "name": "Source",
            "actions": [
              {
                "name": "ImageSource",
                "actionTypeId": {
                  "category": "Source",
                  "owner": "AWS",
                  "provider": "ECR",
                  "version": "1"
                },
                "runOrder": 1,
                "configuration": {
                  "ImageTag": "latest",
                  "RepositoryName": "my-ecr"
                },
                "outputArtifacts": [
                  {
                    "name": "image"
                  }
                ],
                "inputArtifacts": []
              },
              {
                "name": "ConfigSource",
                "actionTypeId": {
                  "category": "Source",
                  "owner": "ThirdParty",
                  "provider": "GitHub",
                  "version": "1"
                },
                "runOrder": 1,
                "configuration": {
                  "Branch": "master",
                  "OAuthToken": "****",
                  "Owner": "me",
                  "PollForSourceChanges": "false",
                  "Repo": "application-config"
                },
                "outputArtifacts": [
                  {
                    "name": "config"
                  }
                ],
                "inputArtifacts": []
              }
            ]
          },
          {
            "name": "Deploy",
            "actions": [
              {
                "name": "DeployBackend",
                "actionTypeId": {
                  "category": "Deploy",
                  "owner": "AWS",
                  "provider": "CodeDeployToECS",
                  "version": "1"
                },
                "runOrder": 1,
                "configuration": {
                  "AppSpecTemplateArtifact": "config",
                  "AppSpecTemplatePath": "production/appspec.yaml",
                  "ApplicationName": "my-codedeploy",
                  "DeploymentGroupName": "my-codedeploy-group",
                  "Image1ArtifactName": "image",
                  "Image1ContainerName": "IMAGE_NAME",
                  "TaskDefinitionTemplateArtifact": "config",
                  "TaskDefinitionTemplatePath": "production/taskdef.json"
                },
                "outputArtifacts": [],
                "inputArtifacts": [
                  {
                    "name": "image"
                  },
                  {
                    "name": "config"
                  }
                ]
              }
            ]
          }
        ],
        "version": 1
      },
      "metadata": {
        "pipelineArn": "arn:aws:codepipeline:ap-northeast-1:123456789000:my-codepipeline",
        "created": 1564107543.285,
        "updated": 1564107543.285
      }
    }
    

    我已经检查了S3中的压缩工件,它肯定包含Github存储库中由 AppSpecTemplatePath TaskDefinitionTemplatePath .

    以下是 appspec.yaml :

    $ cat production/appspec.yaml
    version: 0.0
    Resources:
      - TargetService:
          Type: AWS::ECS::Service
          Properties:
            TaskDefinition: <TASK_DEFINITION>
            LoadBalancerInfo:
              ContainerName: "my-container"
              ContainerPort: 80
    
    0 回复  |  直到 5 年前
        1
  •  2
  •   krismath maasg    5 年前

    经过大量的尝试,我偶然发现一条外语的线索,我找不到它。线程说传递给操作的工件不能大于3 MB。

    config ). 配置存储库在许多项目之间共享,通过将这些项目移动到另一个项目,我将压缩的工件大小从14MB减少到3KB。奇迹般的是,一切都很好。AWS如果您正在阅读本文,请向ECS codeploy添加更多关于工件大小限制的文档,因为我没有看到任何关于此的说明,而且我无法使用这样一条一般性错误消息调试此问题。

        2
  •  1
  •   Jatinkumar Makani    5 年前

    据我所知,有三件事我们必须检查,即使在文件中有语法问题,我们可能会得到异常

    1. 文件存在于正确的路径上,并且您已经验证了这一点。
    2. taskdef.json文件和appspec.yaml的内容都是正确的,没有任何语法错误,我们可以参考本文档[1]来了解它。
    3. 还要确保图像的占位符“”正确。
    4. 另外,如果这些都不起作用,那么您可以尝试在test public github repo上创建,只需将taskdef.json和appspec.yaml文件放在其中并测试相同的东西。

    https://docs.aws.amazon.com/codepipeline/latest/userguide/tutorials-ecs-ecr-codedeploy.html

        3
  •  0
  •   hkjamil    5 年前

    我想我对工件配置有点了解,但找不到任何帮助。

    我创建了另一个codecommit repo,其中仅存储appspec.yml和taskdef.json文件,并遵循以下步骤 aws userguide

    以前我是用主项目repo提交这些文件的。但每次在部署状态下失败时都会显示此消息。[尝试从中读取任务定义项目文件时出现异常…]

    我觉得这样在生产中很安全,codebuild和codeploy在管道中是分开的。