Как передать переменные среды из исходного кода в сборку в AWS CodePipelines? - PullRequest
0 голосов
/ 29 октября 2019

В AWS CodeBuild невероятно легко передавать переменные окружения, как показано в документации . Если я хочу получить ссылку на триггер события, я могу использовать переменную CODEBUILD_WEBHOOK_TRIGGER, которая является контекстно-зависимой: для события GitHub PUSH это будет имя ветви, но для PULL_REQUEST_CREATED или PULL_REQUEST_UPDATEDсобытие, это будет номер PR.

Так что проблема в следующем: при использовании AWS CodePipeline «источником» проекта CodeBuild является CodePipeline вместо веб-крюка GitHub. Внезапно CODEBUILD_WEBHOOK_TRIGGER является пустой строкой и, похоже, ничего не знает об исходном событии GitHub webhook, которое вызвало CodePipeline.

Как получить доступ к этим переменным среды с помощью проекта CodeBuild, который запускаетсяCodePipeline? Кажется, это тот случай использования, который упустил AWS, так что это может быть ошибкой. К сожалению, очень сложно отправить отчет об ошибке только с базовой учетной записью.

1 Ответ

1 голос
/ 01 ноября 2019

Вы правы. В этом конкретном случае CodePipeline - это тот, который выполняет API-интерфейс start-build для запуска сборки. CODEBUILD_WEBHOOK_TRIGGER специфичен для CodeBuild и будет установлен только тогда, когда webhook вызовет CodeBuild.

Если вы хотите знать, webhook, который запускает конвейер, вы можете использовать вызов API list-webhooks [1] с дополнительными фильтрами на основе имени конвейерачтобы получить информацию о веб-крюке.

Ссылка: [1] https://docs.aws.amazon.com/cli/latest/reference/codepipeline/list-webhooks.html

Редактировать 1:

Я ошибался, что веб-списки получат необходимую информацию. Я провел несколько тестов, и он только дает вам список веб-хуков, определенных для действия Source.

Самое близкое, что я могу получить, это использование CLI-вызова list-pipe-executeings [2] в вашей спецификации сборки CodeBuild.

Если вы выполните эту команду:

$ aws codepipeline list-pipeline-executions --pipeline-name <Pipeline_Name> --region us-east-1 --max-items 1

Она выдаст вам вывод, подобный следующему:

{
    "pipelineExecutionSummaries": [
        {
            "pipelineExecutionId": "ccdd87a0-41e4-4489-9332-0720dc526b37",
            "status": "InProgress",
            "startTime": 1573037463.245,
            "lastUpdateTime": 1573037463.245,
            "sourceRevisions": [
                {
                    "actionName": "Source",
                    "revisionId": "4d3bcb17e4a71e3d4bf15215954172639716c326",
                    "revisionSummary": "Merge pull request #3 from shariqmus/readme-edits\n\nUpdate Code.py",
                    "revisionUrl": "https://github.com/shariqmus/hello-world/commit/4d3bcb17e4a71e3d4bf15215954172639716c326"
                }
            ]
        }
    ],
    "NextToken": "eyJuZXh0VG9rZW4iOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAxfQ=="
}

RevisionSummary содержит сведения о связях с общественностью. Вы можете отфильтровать это значение, используя 'jq' [3], поэтому команда в вашей спецификации сборки будет выглядеть примерно так:

  1. Убедитесь, что служебная роль вашего проекта CodeBuild имеет разрешение на выполнение ListPipelineExecutions наPipeline
  2. Добавьте следующее в фазе установки Buildspec:
    • apt-get install jq
  3. Добавьте следующее в Buildspec, где вам нужно получитьсообщение о фиксации:
    • COMMIT_MSG = $ (aws кодовая строка-список-конвейер-выполнения --pipeline-name --max-items 1 | jq -r '.pipelineExecutionSummaries [0] .sourceRevisions [0] .revisionSummary')
    • echo $ COMMIT_MSG

Надеюсь, этот ответ был полезен.

Ссылка:

[2] https://docs.aws.amazon.com/cli/latest/reference/codepipeline/list-pipeline-executions.html

[3] https://stedolan.github.io/jq/

...