@@ -144,6 +144,65 @@ var handleCodeDeploy = function(event, context) {
144
144
return _ . merge ( slackMessage , baseSlackMessage ) ;
145
145
} ;
146
146
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
+
147
206
var handleElasticache = function ( event , context ) {
148
207
var subject = "AWS ElastiCache Notification"
149
208
var message = JSON . parse ( event . Records [ 0 ] . Sns . Message ) ;
@@ -311,7 +370,11 @@ var processEvent = function(event, context) {
311
370
var eventSnsSubject = event . Records [ 0 ] . Sns . Subject || 'no subject' ;
312
371
var eventSnsMessage = event . Records [ 0 ] . Sns . Message ;
313
372
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 ) {
315
378
console . log ( "processing elasticbeanstalk notification" ) ;
316
379
slackMessage = handleElasticBeanstalk ( event , context )
317
380
}
@@ -373,4 +436,4 @@ exports.handler = function(event, context) {
373
436
} else {
374
437
context . fail ( 'hook url has not been set.' ) ;
375
438
}
376
- } ;
439
+ } ;
0 commit comments