Codepipeline restricting artifact properties in codebuild

半腔热情 提交于 2019-12-08 00:57:27

问题


I had created a codebuild to build my project based on the changes in codecommit. This is the batch-get-projects command details for it

{
    "projects": [
        {
            "name": "MultiRepBuild",
            "arn": "arn:aws:codebuild:us-east-1:100000xxx0x:project/MultiRepBui
ld",
            "source": {
                "type": "CODECOMMIT",
                "location": "https://git-codecommit.us-east-1.amazonaws.com/v1/r
epos/PythonRep",
                "gitCloneDepth": 1,
                "insecureSsl": false
            },
            "secondarySources": [],
            "artifacts": {
                "type": "S3",
                "location": "testxxxthe-codebuild",
                "path": "",
                "namespaceType": "NONE",
                "name": "Lambda",
                "packaging": "ZIP",
                "overrideArtifactName": false,
                "encryptionDisabled": false
            },
            "secondaryArtifacts": [],
            "cache": {
                "type": "NO_CACHE"
            },
            "environment": {
                "type": "LINUX_CONTAINER",
                "image": "aws/codebuild/python:3.6.5",
                "computeType": "BUILD_GENERAL1_SMALL",
                "environmentVariables": [],
                "privilegedMode": false
            },
            "serviceRole": "arn:aws:iam::xxxxxxxx:role/service-role/codebuil
d-MultiRepBuild-service-role",
            "timeoutInMinutes": 60,
            "encryptionKey": "arn:aws:kms:us-east-1:xxxxxx:alias/aws/s3",
            "tags": [],
            "created": 1542607679.567,
            "lastModified": 1542611632.345,
            "badge": {
                "badgeEnabled": false
            }
        }
    ],
    "projectsNotFound": []
}

This codebuild will create a buildartifact with specified name Lambda and keep it in specified bucket in zip format.

But when i integrate same codebuild with the Codepipeline it is overriding the bucketname as per this answer. Even i try to change the bucketname with cloudformation but how can i add the parameters that are defined in the artifacts section(i.e.name) from the above snippet, because i will point this name as an S3KeyName in my cloudformation template.

I tried to change in the name in below file which i got through by running aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json command

{
    "pipeline": {
        "name": "MultiBuild",
        "roleArn": "arn:aws:iam::xxxxxxxxxxx:role/service-role/AWSCodePipelineServiceRole-us-east-1-MultiBuild",
        "artifactStore": {
            "type": "S3",
            "location": "codepipeline-us-east-1-xxxxx"
        },
        "stages": [
            {
                "name": "Source",
                "actions": [
                    {
                        "name": "Source",
                        "actionTypeId": {
                            "category": "Source",
                            "owner": "AWS",
                            "provider": "CodeCommit",
                            "version": "1"
                        },
                        "runOrder": 1,
                        "configuration": {
                            "BranchName": "master",
                            "PollForSourceChanges": "false",
                            "RepositoryName": "PythonRep"
                        },
                        "outputArtifacts": [
                            {
                                "name": "SourceArtifact"
                            }
                        ],
                        "inputArtifacts": []
                    }
                ]
            },
            {
                "name": "Build",
                "actions": [
                    {
                        "name": "Build",
                        "actionTypeId": {
                            "category": "Build",
                            "owner": "AWS",
                            "provider": "CodeBuild",
                            "version": "1"
                        },
                        "runOrder": 1,
                        "configuration": {
                            "ProjectName": "MultiRepBuild"
                        },
                        "outputArtifacts": [
                            {
                                "name": "Lambda" -->Here
                            }
                        ],
                        "inputArtifacts": [
                            {
                                "name": "SourceArtifact"
                            }
                        ]
                    }
                ]
            }
        ],
        "version": 1
    }
}

This is creating a folder with name Lambda rather than creating a file. The file structure is like this

 ---MultiBuild
      |
      |
      -->Lambda
          |
          |
          abcd.zip
      -->SourceArti
          |
          |
          efgh.zip

回答1:


Sorry! This is an unfortunate consequence of the way CodePipeline manages artifacts. The "name" in the CodePipeline outputArtifacts field is just a logical name. CodePipeline was designed so that future stages can reference artifacts created in past stages with that name. These artifacts are stored in the bucket you specify in your pipeline, but I don't think it's really expected for you to use these objects in your deployment configuration.

If you're building a ZIP file which you want to deploy to a Lambda function, you can create a second stage in your pipeline which deploys to the Lambda function you have: https://docs.aws.amazon.com/lambda/latest/dg/build-pipeline.html

If you just need your ZIP file to be in a predictable place (eg., s3://testxxxthe-codebuild/Lambda.zip) for some other process you've created, we have heard your use case from several customers and are thinking of ways to make this experience better. In the mean time, you might find the following forum post useful: https://forums.aws.amazon.com/thread.jspa?threadID=228984



来源:https://stackoverflow.com/questions/53370873/codepipeline-restricting-artifact-properties-in-codebuild

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!