AWS CodePipeline“需要一个AppSpec文件,但在版本控制中找不到”

8
我正在尝试使用CodeCommit、ECR和ECS设置部署流水线。我的流水线通过源代码和构建步骤。如果我将appspec.yaml文件上传到S3存储桶中,我可以通过CodeDeploy手动部署。由对CodeCommit存储库的更改触发的部署始终失败,并显示以下错误:

需要一个AppSpec文件,但在修订版本中找不到

当我查看失败部署的详细信息时,我可以拉出修订版本位置,其中显示如下:

revision zip file contents

我在故障排除代码部署部分看到一些编辑器可能会引起问题。我正在Linux上使用VSCode,所以我认为这不应该是问题。另外,如果我将相同的 appspec文件上传到S3并从手动部署中引用它,则可以正常工作。
我还尝试上传相同的文件,但命名为appspec.yml。仍然失败了。
此部署使用的角色具有完全的S3访问权限,不确定是否可能存在其他权限相关的问题。
以下是我的CodePipeline定义:
{
"pipeline": {
    "roleArn": "arn:aws:iam::690517313378:role/service-role/AWSCodePipelineServiceRole-us-east-1-blottermappertf", 
    "stages": [
        {
            "name": "Source", 
            "actions": [
                {
                    "inputArtifacts": [], 
                    "name": "Source", 
                    "region": "us-east-1", 
                    "actionTypeId": {
                        "category": "Source", 
                        "owner": "AWS", 
                        "version": "1", 
                        "provider": "CodeCommit"
                    }, 
                    "outputArtifacts": [
                        {
                            "name": "SourceArtifact"
                        }
                    ], 
                    "configuration": {
                        "PollForSourceChanges": "false", 
                        "BranchName": "master", 
                        "RepositoryName": "blottermapper"
                    }, 
                    "runOrder": 1
                }
            ]
        }, 
        {
            "name": "Build", 
            "actions": [
                {
                    "inputArtifacts": [
                        {
                            "name": "SourceArtifact"
                        }
                    ], 
                    "name": "Build", 
                    "region": "us-east-1", 
                    "actionTypeId": {
                        "category": "Build", 
                        "owner": "AWS", 
                        "version": "1", 
                        "provider": "CodeBuild"
                    }, 
                    "outputArtifacts": [
                        {
                            "name": "BuildArtifact"
                        }
                    ], 
                    "configuration": {
                        "ProjectName": "blottermapper", 
                        "EnvironmentVariables": "[{\"name\":\"REPOSITORY_URI\",\"value\":\"690517313378.dkr.ecr.us-east-1.amazonaws.com/net.threeninetyfive\",\"type\":\"PLAINTEXT\"}]"
                    }, 
                    "runOrder": 1
                }
            ]
        }, 
        {
            "name": "Deploy", 
            "actions": [
                {
                    "inputArtifacts": [
                        {
                            "name": "BuildArtifact"
                        }
                    ], 
                    "name": "Deploy", 
                    "region": "us-east-1", 
                    "actionTypeId": {
                        "category": "Deploy", 
                        "owner": "AWS", 
                        "version": "1", 
                        "provider": "CodeDeploy"
                    }, 
                    "outputArtifacts": [], 
                    "configuration": {
                        "ApplicationName": "blottermappertf", 
                        "DeploymentGroupName": "blottermappertf"
                    }, 
                    "runOrder": 1
                }
            ]
        }
    ], 
    "artifactStore": {
        "type": "S3", 
        "location": "codepipeline-us-east-1-634554346591"
    }, 
    "name": "blottermappertf", 
    "version": 1
}, 
"metadata": {
    "pipelineArn": "arn:aws:codepipeline:us-east-1:690517313378:blottermappertf", 
    "updated": 1573712712.49, 
    "created": 1573712712.49
}

}


你是否在使用 CodePipeline 进行管道定义部分? 如果是,请在此处分享代码。 - Hassan Mussana
@HassanMussana 我是,我刚刚把定义添加到问题中。感谢您抽出时间查看。 - Ryan Quinn
我已经解决了它。我使用了错误的操作提供程序,并需要提供一个任务定义文件。 - Ryan Quinn
2个回答

14

"需要一个AppSpec文件,但在修订版本中找不到"

上述错误与您的codepipeline配置有关。要执行ECS codedeploy部署,您的codepipeline部署阶段中的提供程序必须是"ECS(蓝/绿)"而不是"Codedeploy"(codedeploy用于EC2部署)。尽管在后端它使用了codedeploy,但提供程序的名称是"ECS(蓝/绿)"。


2

嗨,@Ryan Quinn。你有处理过根据环境上下文替换appspec.yml文件中任务定义arn的需求吗?如果有,你是如何交换arn的? - GGG
抱歉我没有处理过那个,但我很好奇答案是什么。 - Ryan Quinn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接