CommitID как переменная в CodePipeline - AWS - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть конвейер, который создает образы докера и отправляет его в ECR.Поскольку я хочу использовать предоставляемые AWS среды сборки, я использую 2 этапа сборки.

Всего конвейер состоит из 3 этапов

  1. Получить исходный код из GitHub: Source
  2. Установить зависимости и создать файл .war: Build: aws /codebuild / java: openjdk-9
  3. Создайте образ докера и отправьте его в ECR: Сборка: aws / codebuild / docker: 17.09.0

Я хочу отметить тег докераизображения с идентификатором фиксации, который обычно равен CODEBUILD_RESOLVED_SOURCE_VERSION.Однако я заметил, что эта переменная доступна только на втором этапе, который идет сразу после источника.

Наихудший случай, который я нашел, состоит в том, чтобы записать эту переменную в файл на втором этапе и включить этот файл в артефакты, являющиеся входными данными для третьего этапа.

Есть лилучший способ использовать это на моем третьем этапе или в целом на конвейере?

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Можете ли вы записать идентификатор фиксации в файл, который находится рядом с файлом WAR в артефакте CodePipeline?

И пару связанных мыслей:

  • CodeBuild можно настроить в CodePipelineиметь несколько входных артефактов, поэтому я предполагаю, что CODEBUILD_RESOLVED_SOURCE_VERSION относится к первичному артефакту.Я не уверен, как обобщить получение идентификатора фиксации в третьем действии (публикация в ECR), потому что фан-вход (несколько источников с отличным идентификатором фиксации) может происходить в обоих действиях CodeBuild.
  • Пометка при фиксацииИдентификатор означает, что несколько конвейерных выполнений могут создавать изображение с одним и тем же тегом.В идеале я бы хотел, чтобы каждое выполнение конвейера было изолированным, поэтому мне не нужно беспокоиться об изменении тега при одновременном выполнении конвейера или позже для использования другого закрытия зависимости.
0 голосов
/ 11 декабря 2018

Я использую комбинацию codepipeline + jq.Это не лучший подход, но он лучший у меня до сих пор.

commit=$(aws codepipeline get-pipeline-state --name PIPELINE_NAME | jq '.stageStates[0].actionStates[0].currentRevision.revisionId' | tr -d '"'))

, а затем вставьте изображение докера с новым тегом.Сначала вам нужно установить jq, если вам не нравится jq, вы можете разобрать ответ самостоятельно.

Это 'может' быть дубликатом этого другого вопроса

...