Codepipeline, ограничивающий свойства артефактов в codebuild - PullRequest
0 голосов
/ 19 ноября 2018

Я создал codebuild для сборки своего проекта на основе изменений в codecommit. Это batch-get-projects подробности команды для него

{
    "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": []
}

Эта кодовая сборка создаст артефакт сборки с указанным именем Lambda и сохранит его в указанном сегменте в формате zip.

Но когда я интегрирую ту же кодовую сборку с Codepipeline, она переопределяет имя сегмента в соответствии с этим ответом . Даже я пытаюсь изменить имя сегмента с помощью облачной информации, но как я могу добавить параметры, которые определены в разделе артефактов (например, name) из приведенного выше фрагмента, потому что я укажу это name как S3KeyName в моей облачной информации шаблон.

Я попытался изменить имя в приведенном ниже файле, который я получил, запустив 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
    }
}

Это создание папки с именем Lambda, а не создание файла. Структура файла выглядит следующим образом

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

1 Ответ

0 голосов
/ 29 ноября 2018

Извини!Это печальное следствие того, как CodePipeline управляет артефактами.«Имя» в поле выходных артефактов CodePipeline - это просто логическое имя.CodePipeline был разработан таким образом, чтобы будущие этапы могли ссылаться на артефакты, созданные на предыдущих этапах с таким именем.Эти артефакты хранятся в корзине, которую вы указали в своем конвейере, но я не думаю, что вы действительно ожидаете, что вы будете использовать эти объекты в конфигурации развертывания.

Если вы создаете ZIP-файл, который вам нуженчтобы развернуть функцию Lambda, вы можете создать в своем конвейере вторую стадию, которая развернется к имеющейся у вас функции Lambda: https://docs.aws.amazon.com/lambda/latest/dg/build-pipeline.html

Если вам просто нужно, чтобы ваш ZIP-файл находился в предсказуемом месте (например,, s3://testxxxthe-codebuild/Lambda.zip) для какого-то другого процесса, который вы создали, мы услышали ваш сценарий использования от нескольких клиентов и подумываем, как улучшить этот процесс.А пока вам может пригодиться следующее сообщение на форуме: https://forums.aws.amazon.com/thread.jspa?threadID=228984

...