Как иметь несколько триггеров codepipeline в aws? - PullRequest
0 голосов
/ 23 декабря 2019

Как сделать так, чтобы Aws CodePipeline запускался из нескольких источников? Представьте, что я хочу, чтобы один и тот же конвейер запускался всякий раз, когда я отправляю в два разных репозитория? Кроме того, этап сборки должен знать, какой репозиторий вызвал конвейер и извлечь из правильного репозитория

1 Ответ

0 голосов
/ 23 декабря 2019

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

  • создание лямбда-функции, которая запускает codebuild
  • лямбда-функция будет иметь столько триггеров, сколько желаемых вам репозиториевзапускать тот же конвейер
  • лямбда-функция будет передавать переменные среды в CodeBuild и запускать его выполнение
  • CodeBuild определит, из какого репозитория вытащить в зависимости от значения переменной среды

How-To:

const AWS = require('aws-sdk'); // importing aws sdk
const fs = require('fs'); // importing fs to read our json file
const handler = (event, context) => {
  AWS.config.update({region:'us-east-2'}); // your region can vary from mine
  var codebuild = new AWS.CodeBuild(); // creating codebuild instance
  //this is just so you can see aws sdk loaded properly so we are going to have it print its credentials. This is not required but shows us that the sdk loaded correctly
  AWS.config.getCredentials(function(err) {
  if (err) console.log(err.stack);
  // credentials not loaded
  else {
    console.log("Access key:", AWS.config.credentials.accessKeyId);
    console.log("Secret access key:", AWS.config.credentials.secretAccessKey);
  }
});

var repositories = JSON.parse(fs.readFileSync('repositories.json').toString());
var selectedRepo = event.Records[0].eventTriggerName;

var params = {
        projectName: 'lib-patcher-build', /* required */
        artifactsOverride: {
            type: 'CODEPIPELINE', /* required*/
          },
        environmentVariablesOverride: [
          {
            name: 'name-of-the-environment-variable', /* required */
            value: 'its-value', /* required */
            type: 'PLAINTEXT'
          },
          {
            name: 'repo-url', /* required */
            value: 'repositories[selectedRepo].url', /* required */
            type: 'PLAINTEXT'
          }
          /* more items */
        ],
      };
      codebuild.startBuild(params, function(err, data) {
        if (err) console.log(err, err.stack); // an error occurred
        else     console.log(data);           // successful response
      });

};

exports.handler = handler;
...