AWS Code-Pipeline,Python:获取正在部署的当前提交名称

时间:2019-09-02 12:45:24

标签: python amazon-web-services boto3 pipeline aws-codepipeline

我正在通过代码管道部署应用程序。在此期间,我正在调用Lambda函数以在Slack上通知用户。我想添加提交名称。知道如何获取该信息。

代码:

import json
import http.client
import urllib.parse
from time import strftime
import boto3
import datetime
import dateutil.tz

WEBHOOK_URL = "https://hooks.slack.com/services/TOKEN"
NOTIFICATION_CHANNEL = "CHANNEL-NAME"

eastern = dateutil.tz.gettz('Europe/Berlin')
final_time = datetime.datetime.now(tz=eastern).strftime("%a, %d %b %Y %I:%M:%S %p %Z")

def lambda_handler(event, context):
    send_message("Deployment for https://ourdomain.com has started at %s"%final_time,":ghost:","webhookbot")
    job_id = event['CodePipeline.job']['id']
    put_job_success(job_id,"Code executed")

def put_job_success(job, message):
    print('Putting job success')
    print(message)
    code_pipeline = boto3.client('codepipeline')
    code_pipeline.put_job_success_result(jobId=job)

def send_message(message, icon, username):
    payload = get_payload(username, icon, message)
    data = get_encoded_data_object(payload)
    headers = get_headers()
    response = send_post_request(data, headers)

def get_payload(username, icon, message):
    payload_dict = {
        'channel': NOTIFICATION_CHANNEL,
        'username': username,
        'icon_emoji': icon,
        'text': message,
    }
    payload = json.dumps(payload_dict)
    return payload

def get_encoded_data_object(payload):
    values = {'payload': payload}
    str_values = {}
    for k, v in values.items():
        str_values[k] = v.encode('utf-8')
    data = urllib.parse.urlencode(str_values)
    return data

def get_headers():
    headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
    return headers

def send_post_request(body, headers):
    https_connection = get_https_connection_with_slack()
    https_connection.request('POST', WEBHOOK_URL, body, headers)
    response = https_connection.getresponse()
    return response

def get_https_connection_with_slack():
    h = http.client.HTTPSConnection('hooks.slack.com')
    return h

1 个答案:

答案 0 :(得分:1)

您可以在构建阶段(我假设您将在之前执行)中将其写入文件,并将构建阶段的输出工件作为输入工件传递给lambda。然后在lambda中,您可以访问其输入工件(例如,使用s3客户端)并读取提交。

在这里您可以找到包含输入工件的事件的示例: https://medium.com/@codershunshun/how-to-invoke-aws-lambda-in-codepipeline-d7c77457af95