UNPKG

briareus

Version:

Briareus assists with Feature Branch deploys to ECS

86 lines (73 loc) 2.64 kB
'use strict' const AWS = require('aws-sdk'); const _ = require('lodash'); const escapeStringRegexp = require('escape-string-regexp'); const traverse = require('traverse'); let action = module.exports = function (pipeline, payload, cb) { const ecs = new AWS.ECS(); let taskDefinition = _.cloneDeep(payload.taskDefinition); taskDefinition.family = payload.name; taskDefinition.executionRoleArn = payload.taskExecutionRoleArn; _.each(taskDefinition.containerDefinitions, (container) => { // Set secrets container.secrets = _ .chain(payload.assets.ssmParameters) .filter({ container: container.name }) .map((secret) => { return { name: secret.name, valueFrom: secret.arn } }) .value() // Set environment variables let envs = _ .chain(payload.envs) .filter({ container: container.name }) .map((env) => _.pick(env, ['name', 'value'])) .value() if (!container.environment) container.environment = []; container.environment = container.environment.concat(envs); // Set logging configuration container.logConfiguration = { logDriver: 'awslogs', options: { 'awslogs-region': AWS.config.region, 'awslogs-group': payload.variantsLogGroup, 'awslogs-stream-prefix': payload.slug } } }); // Do variable replacement in Task Definition values const vars = { 'build_image': payload.image, 'region': AWS.config.region, 'slug': payload.slug, 'aws_account_id': payload.awsAccountId, 'endpoint.host': payload.endpoint.host, 'endpoint.url': payload.endpoint.url, 'git_repo': payload.gitRepo, 'git_branch': payload.gitBranch, 'git_commit': payload.gitCommit, 'build_url': payload.buildUrl, 'pull_request_id': payload.pullRequestId } traverse(taskDefinition).forEach(function (node) { if (this.notLeaf || !_.isString(node)) return; _.each(vars, (value, name) => { node = node.replace(new RegExp('\\${' + escapeStringRegexp(name) + '}'), value); }); this.update(node); }); ecs.registerTaskDefinition(taskDefinition, (err, data) => { if (err) return cb(err); cb(null, [ { op: 'add', path: '/assets/buildTaskDefinition', value: { arn: data.taskDefinition.taskDefinitionArn } }, { op: 'add', path: '/assets/taskDefinitions/-', value: { arn: data.taskDefinition.taskDefinitionArn } } ]); }); } action.waiting = 'Creating build task definition'; action.done = function (payload) { return `Build task definition "${payload.assets.buildTaskDefinition.arn}" has been created` }