Может ли AWS CodePipeline отслеживать несколько ветвей функций и запускать тесты для каждого?
С помощью Bitbucket и Bamboo я мог отслеживать Bamboo по каждой ветки функций и запускать тесты для каждой из них, чтобы во время запроса на извлечение я мог видеть, прошла ли ветвь свои модульные тесты.
С AWS CodePipeline я не могу сказать, смогу ли я отследить каждую ветвь компонента и выполнить тесты на них перед слиянием.
Это возможно? Если это так, пожалуйста, укажите мне на документацию.
Ответы
Ответ 1
К сожалению, не представляется возможным инициировать сборки из нескольких веток в CodePipeline. Это немного удивляет меня, так как любой другой инструмент CI, который я использовал, предлагает эту функциональность прямо из коробки (GitLabCI, TravisCI, CircleCI, Bitbucket Pipelines, TeamCity) или с проверенным в бою плагином (Jenkins).
Однако на данный момент, возможно, существует несколько способов обойти это ограничение, которое я нашел и могу использовать /adapt: https://github.com/nicolai86/awesome-codepipeline-ci.
У меня точно такая же проблема, я сейчас над ней работаю. :)
Ответ 2
Дальнейший обзор показывает, что с облачной информацией вы можете выбрать ветку, которая отслеживает дорожки CodePipeline,
AWS CodeCommit (CodeCommit
)
- PollForSourceChanges¹ (необязательно)
- RepositoryName (обязательно)
- BranchName (обязательно)
Вы можете увидеть пример полного шаблона, но этап CodePipeline выглядит,
Name: CheckoutSourceTemplate
ActionTypeId:
Category: Source
Owner: AWS
Version: 1
Provider: CodeCommit
Configuration:
PollForSourceChanges: True
RepositoryName: !GetAtt [PipelineRepo, Name]
BranchName: master
OutputArtifacts:
- Name: TemplateSource
RunOrder: 1
С CodeCommit Repo, вы можете создать Triggers, которые могут использовать эти триггеры для запустить функцию лямбда,
Вы можете настроить функции лямбда, создав триггер в консоли Lambda как часть функции. Это самый простой метод, поскольку триггеры, созданные в консоли Lambda, автоматически включают разрешения, необходимые для AWS CodeCommit для вызова функции Lambda. Если вы создаете триггер в AWS CodeCommit, вы должны включить политику, позволяющую AWS CodeCommit вызывать функцию. Для получения дополнительной информации см. Создать триггер для существующей функции лямбда и Пример 2. Создание политики для интеграции лямбда AWS.
Итак, что может произойти, это настроить шаблон CloudFormation, как указано выше, для отслеживания основной ветки. Затем введите триггер CodeCommit для изменений в репозитории и вызовите функцию Lambda, которая использует Boto3 для get_pipeline
для получения магистрального конвейера.
Затем используйте update_pipeline
или create_pipeline
добавить этап в существующий магистральный конвейер или создать совершенно новый конвейер, который отслеживает желаемые дополнительные ветки.
Таким образом, CodePipeline может отслеживать ветки функций полезным способом.
Ответ 3
Я искал решение именно этой проблемы. В конце концов я решил, что CodeBuild, который может быть запущен из регулярного выражения ветки, начинает конвейер, передавая архив к определенному ключу S3. В моем случае у меня также было, чтобы CodeBuild выполнял весь процесс сборки/тестирования, но вы также можете настроить CodeBuild так, чтобы он только извлекал код и нажимал на него клавишу S3, которая запускает вашу CodePipeline.
Вот часть примера конфигурации CodeBuild, соответствующей 2 веткам: ![Example showing a <code>Branch filter</code> matching 2 branches]()
Затем я установил артефакт CodeBuild для перехода к одному ключу в одной корзине.
Затем я устанавливаю CodePipeline с источником Amazon S3, указывающим на тот же ключ/корзину.
Ответ 4
Я столкнулся с этой же проблемой и закончил тем, что написал пошаговое руководство по двум различным способам сделать это в зависимости от вашего исходного хранилища.
Как отслеживать несколько веток Git в AWS CodePipeline
[TL; DR]
GitHub или Bitbucket: создайте проект CodeBuild с помощью webhook и используйте S3 в качестве источника.
CodeCommit: создайте лямбда-триггер, который создает новый конвейер для каждой ветки.