Skip to content

Commit 673fa1d

Browse files
committed
format codepipeline notifications for slack
1 parent ff48292 commit 673fa1d

File tree

1 file changed

+65
-2
lines changed

1 file changed

+65
-2
lines changed

index.js

Lines changed: 65 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,65 @@ var handleCodeDeploy = function(event, context) {
144144
return _.merge(slackMessage, baseSlackMessage);
145145
};
146146

147+
var handleCodePipeline = function(event, context) {
148+
var subject = "AWS CodePipeline Notification";
149+
var timestamp = (new Date(event.Records[0].Sns.Timestamp)).getTime()/1000;
150+
var snsSubject = event.Records[0].Sns.Subject;
151+
var message;
152+
var fields = [];
153+
var color = "warning";
154+
var changeType = "";
155+
156+
try {
157+
message = JSON.parse(event.Records[0].Sns.Message);
158+
detailType = message['detail-type'];
159+
160+
if(detailType === "CodePipeline Pipeline Execution State Change"){
161+
changeType = "";
162+
} else if(detailType === "CodePipeline Stage Execution State Change"){
163+
changeType = "STAGE " + message.detail.stage;
164+
} else if(detailType === "CodePipeline Action Execution State Change"){
165+
changeType = "ACTION";
166+
}
167+
168+
if(message.detail.state === "SUCCEEDED"){
169+
color = "good";
170+
} else if(message.detail.state === "FAILED"){
171+
color = "danger";
172+
}
173+
header = message.detail.state + ": CodePipeline " + changeType;
174+
fields.push({ "title": "Message", "value": header, "short": false });
175+
fields.push({ "title": "Pipeline", "value": message.detail.pipeline, "short": true });
176+
fields.push({ "title": "Region", "value": message.region, "short": true });
177+
fields.push({
178+
"title": "Status Link",
179+
"value": "https://console.aws.amazon.com/codepipeline/home?region=" + message.region + "#/view/" + message.detail.pipeline,
180+
"short": false
181+
});
182+
}
183+
catch(e) {
184+
color = "good";
185+
message = event.Records[0].Sns.Message;
186+
header = message.detail.state + ": CodePipeline " + message.detail.pipeline;
187+
fields.push({ "title": "Message", "value": header, "short": false });
188+
fields.push({ "title": "Detail", "value": message, "short": false });
189+
}
190+
191+
192+
var slackMessage = {
193+
text: "*" + subject + "*",
194+
attachments: [
195+
{
196+
"color": color,
197+
"fields": fields,
198+
"ts": timestamp
199+
}
200+
]
201+
};
202+
203+
return _.merge(slackMessage, baseSlackMessage);
204+
};
205+
147206
var handleElasticache = function(event, context) {
148207
var subject = "AWS ElastiCache Notification"
149208
var message = JSON.parse(event.Records[0].Sns.Message);
@@ -311,7 +370,11 @@ var processEvent = function(event, context) {
311370
var eventSnsSubject = event.Records[0].Sns.Subject || 'no subject';
312371
var eventSnsMessage = event.Records[0].Sns.Message;
313372

314-
if(eventSubscriptionArn.indexOf(config.services.elasticbeanstalk.match_text) > -1 || eventSnsSubject.indexOf(config.services.elasticbeanstalk.match_text) > -1 || eventSnsMessage.indexOf(config.services.elasticbeanstalk.match_text) > -1){
373+
if(eventSubscriptionArn.indexOf(config.services.codepipeline.match_text) > -1 || eventSnsSubject.indexOf(config.services.codepipeline.match_text) > -1 || eventSnsMessage.indexOf(config.services.codepipeline.match_text) > -1){
374+
console.log("processing codepipeline notification");
375+
slackMessage = handleCodePipeline(event,context)
376+
}
377+
else if(eventSubscriptionArn.indexOf(config.services.elasticbeanstalk.match_text) > -1 || eventSnsSubject.indexOf(config.services.elasticbeanstalk.match_text) > -1 || eventSnsMessage.indexOf(config.services.elasticbeanstalk.match_text) > -1){
315378
console.log("processing elasticbeanstalk notification");
316379
slackMessage = handleElasticBeanstalk(event,context)
317380
}
@@ -373,4 +436,4 @@ exports.handler = function(event, context) {
373436
} else {
374437
context.fail('hook url has not been set.');
375438
}
376-
};
439+
};

0 commit comments

Comments
 (0)