在本博文中,我们将讨论如何通过Jenkins控制AWS Lambda的自动化部署,并在部署成功后使用DingDing机器人发送通知。
第1部分:准备工作
1.1 创建DingDing机器人
在DingDing中创建一个机器人,并获取其访问令牌(token)。这将用于向DingDing发送更新通知。
1.2 存储AWS凭证
使用AWS Secrets Manager存储您的AWS凭证信息。确保您具有足够的权限以访问Lambda函数和Secrets Manager。
第2部分:配置Jenkins任务
2.1 安装AWS Lambda插件
在Jenkins中安装AWS Lambda插件,以便通过Jenkins管理Lambda函数的部署。
2.2 配置Jenkins任务
创建一个新的Jenkins任务,配置以下步骤:
步骤1:拉取代码
# 示例命令
git clone https://github.com/your/repo.git
cd repo
步骤2:构建Lambda包
使用AWS CLI或其他工具构建Lambda函数的部署包。确保将构建好的ZIP文件上传到S3存储桶。
# 示例命令
zip -r lambda_function.zip *
aws s3 cp lambda_function.zip s3://your-s3-bucket/lambda_function.zip
步骤3:部署Lambda函数
使用AWS Lambda插件配置Lambda函数的部署。
步骤4:发送DingDing通知
在Jenkins任务的最后一步,添加一个Shell脚本步骤,使用之前提到的Python脚本发送DingDing通知。
# 示例命令
python send_notification.py
确保您的Jenkins任务可以访问AWS凭证和DingDing机器人的token。
第3部分:编写Python脚本
编写一个Python脚本,用于发送DingDing通知。您可以使用之前提到的脚本或根据需要进行修改。
#!/usr/bin/python3
import boto3
import requests
import json,os
def get_secret(secret_name, region_name):
"""
从AWS Secrets Manager获取指定的secret。
"""
client = boto3.client(service_name='secretsmanager', region_name=region_name)
return json.loads(client.get_secret_value(SecretId=secret_name)['SecretString'])
def send_dingding_message(lambda_name, token, version):
"""
向DingDing发送一条消息,通知Lambda函数部署成功。
"""
headers = {'Content-Type': 'application/json'}
data = {
"msgtype": "markdown",
"markdown": {
"title": f"Restart {lambda_name} Success",
"text": f"<font face='黑体' color='#00EC00'>Restart {lambda_name} VERSION:{version} Success</font>\n"
}
}
response = requests.post(f"https://oapi.dingtalk.com/robot/send?access_token={token}", headers=headers, data=json.dumps(data))
print(response.text)
def update_lambda_function_and_get_version(lambda_name, s3_bucket, s3_key, region):
"""
使用boto3更新Lambda函数的代码并发布新版本,然后返回新版本号。
"""
client = boto3.client('lambda', region_name=region)
response = client.update_function_code(
FunctionName=lambda_name,
S3Bucket=s3_bucket,
S3Key=s3_key,
Publish=True
)
return response['Version']
# 从Secrets Manager获取DingDing token
token = get_secret('base', 'us-east-1')['BUILD1_TOKEN']
lambda_names = os.environ['LAMBDA_NAMES'].split(',')
for lambda_name in lambda_names:
if lambda_name == "S-iot-cvm-account":
s3_bucket = 'pro-codebuild'
s3_key = 'lambda-zip/pro/S-iot-cvm-account.zip'
region = 'us-east-1' # 替换为你的AWS区域
version = update_lambda_function_and_get_version(lambda_name, s3_bucket, s3_key, region)
send_dingding_message(lambda_name, token, version)
第4部分:测试和部署
测试您的Jenkins任务是否正常工作。手动触发任务,观察Jenkins构建日志和DingDing通知。
最后,根据需要调整脚本和Jenkins任务,确保您的自动化部署通知流程能够满足预期需求。
结论
通过结合Jenkins、AWS Lambda、Secrets Manager和DingDing机器人,您可以实现Lambda函数代码的自动更新和成功部署的通知。这个自动化流程可以显著简化您的部署流程,提高开发团队的效率。请记得根据实际需求调整脚本,并定期进行测试和优化。祝您自动化部署通知顺利!