Динамически меняйте ветки на AWS CodePipeline

Я ищу хорошее решение о том, как запускать параметризованные (настраиваемые) сборки в CodePipeline, где ветвь может быть изменена динамически?

Немного предыстории проблемы: мне нужна среда по требованию, которая будет запущена в определенной ветке. Мы уже используем сервер Bamboo CI для части инфраструктуры, и это легко достижимо с помощью специализированной сборки в Jenkins.

Поэтому в основном мне нужен способ запуска сборки с переходом в качестве переменной на CodePipeline в AWS.

1 ответ

Мы можем очень хорошо иметь поддержку динамического ветвления при следующем подходе.

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

схема потока

Создайте функцию Lambda, которая принимает данные веб-хука GitHub в качестве входных данных, используя boto3, интегрируйте их с конвейером AWS (извлекайте конвейер и обновляйте), имейте API-шлюз для вызова функции Lambda в качестве вызова покоя и, наконец, создайте веб-хук к репозиторию GitHub.

Внешняя ссылка:

В настоящее время CodePipeline не поддерживает сборки на основе веток. Обычно CodePipeline лучше всего подходит для запуска проверок и автоматизации выпуска вашей ветки "release".

Одним из вариантов проверки перед слиянием является использование поддержки вытягивающих запросов CodeBuild для проверки запросов на извлечение, а затем использование CodePipeline для проверки объединенного кода: https://aws.amazon.com/about-aws/whats-new/2017/09/aws-codebuild-now-supports-building-github-pull-requests/

У меня такое же требование после выполнения некоторых исследований и разработок, и я получил ответ, в разделе сборки кода AWS не было триггера базы кондиционирования. Есть триггер для планирования базового задания cron, которое запускается только через минуту.. Так что, если нужно запустить триггер или динамически запустить сборку кода после проверки вашего состояния, тогда вам нужно использовать aws sdk

Я использую aws cli и nodejs

Для команды (cli):

aws codebuild start-build --project-name project1

--environment-variables-override name=variablename,value=variablevalue

для узла js

     var AWS = require("aws-sdk");
      var codebuild = new AWS.CodeBuild();

     var params = {
    projectName: machineName, /* required */
    environmentVariablesOverride: [
        {
          name: 'APPID', /* required */
          value: appid, /* required */
        },
         {
          name: 'BUILDID', /* required */
          value: buildidnew, /* required */
        },{
          name: 'REBUILD', /* required */
          value: rebuildid, /* required */
        }

      ],
    };

    codebuild.startBuild(params, function(err, data) {

      if (err) {
       callback(err, null);

      }
      else {

     callback(null, data);
      }  



    });

Помните, что значение переменной должно быть строкой

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

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

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

Другие вопросы по тегам