-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlambda.js
More file actions
116 lines (101 loc) · 3.48 KB
/
lambda.js
File metadata and controls
116 lines (101 loc) · 3.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
console.log('Loading function');
exports.handler = (eventC, context, callback) => {
var AWS = require('aws-sdk');
var ecs = new AWS.ECS({
apiVersion: '2014-11-13'
});
var ecr = new AWS.ECR({
apiVersion: '2015-09-21'
});
var codepipeline = new AWS.CodePipeline();
var jobId = eventC["CodePipeline.job"].id;
event = JSON.parse(eventC["CodePipeline.job"].data.actionConfiguration.configuration.UserParameters);
console.log('TaskName =', event.ecs_task_name);
console.log('ECSClusterName =', event.ecs_cluster_name);
console.log('ECSServiceName =', event.ecs_service_name);
console.log('ECRRepositoryName =', event.ecr_repository_name);
var ecs_task_name = event.ecs_task_name;
var ecs_cluster_name = event.ecs_cluster_name;
var ecs_service_name = event.ecs_service_name;
var ecr_repository_name = event.ecr_repository_name;
var tag = 'latest';
var p_ecr = {
repositoryName: ecr_repository_name,
filter: {
tagStatus: 'TAGGED'
},
imageIds: [{
imageTag: 'latest'
}]
};
// Notify AWS CodePipeline of a successful job
var putJobSuccess = function(message) {
var params = {
jobId: jobId
};
codepipeline.putJobSuccessResult(params, function(err, data) {
if(err) {
context.fail(err);
} else {
context.succeed(message);
}
});
};
// Notify AWS CodePipeline of a failed job
var putJobFailure = function(message) {
var params = {
jobId: jobId,
failureDetails: {
message: JSON.stringify(message),
type: 'JobFailed',
externalExecutionId: context.invokeid
}
};
codepipeline.putJobFailureResult(params, function(err, data) {
context.fail(message);
});
};
ecr.describeImages(p_ecr, function(ecr_err, ecrData) {
if (ecr_err) putJobFailure(err); // an error occurred
else {
image_tags = ecrData["imageDetails"][0]["imageTags"];
image_tags.splice(image_tags.indexOf('latest'), 1);
console.log(image_tags);
tag = image_tags[0];
var p_task = {
taskDefinition: ecs_task_name
};
//GetCurrentTask
ecs.describeTaskDefinition(p_task, function(err, data) {
if (err) putJobFailure(err); // an error occurred
else {
var p_task_update = {
"containerDefinitions": data["taskDefinition"]["containerDefinitions"],
"family": data["taskDefinition"]["family"],
"volumes": data["taskDefinition"]["volumes"],
"networkMode": data["taskDefinition"]["networkMode"],
"placementConstraints": data["taskDefinition"]["placementConstraints"]
}
image = p_task_update["containerDefinitions"][0]["image"];
p_task_update["containerDefinitions"][0]["image"] = image.split(":")[0] + ":" + tag;
//UpdateTask
ecs.registerTaskDefinition(p_task_update, function(err, data) {
if (err) putJobFailure(err); // an error occurred
else {
//UpdateService
var p_service = {
service: ecs_service_name,
cluster: ecs_cluster_name,
taskDefinition: ecs_task_name
};
ecs.updateService(p_service, function(err, data) {
if (err) putJobFailure(err); // an error occurred
else putJobSuccess(data);
});
}
});
}
});
}
});
};