首页 > 其他分享 >Jenkins 构建 AWS Fargate 服务的自动化更新控制

Jenkins 构建 AWS Fargate 服务的自动化更新控制

时间:2023-12-15 17:31:43浏览次数:35  
标签:task Fargate service AWS Jenkins name

引言

在云原生应用开发中,AWS Fargate 是一种无服务器容器编排服务,能够简化容器的部署和管理。结合 Jenkins,我们可以实现对 AWS Fargate 服务的自动构建和更新控制。本文将介绍如何通过 Python 脚本实现 Fargate 服务的自动构建和部署,并通过 DingDing 机器人发送通知。

Jenkins 构建 AWS Fargate 服务的意义与目的

AWS Fargate 提供了一种简化容器部署的方式,但仍需要处理构建和部署的复杂性。通过使用 Jenkins,我们可以实现以下目标:

  1. 自动化构建: 使用 Jenkins Pipeline 自动构建 Docker 镜像,并推送到 Amazon Elastic Container Registry (ECR)。
  2. 参数化控制: 使用 Jenkins Extended Choice Parameter 插件,通过参数化控制构建和更新的 Fargate 服务。
  3. 集成 AWS 服务: 使用 Boto3 SDK 集成 Jenkins 与 AWS 服务,包括 ECS(Elastic Container Service)。
  4. 实时通知: 使用 DingDing 机器人,实现 Fargate 服务部署成功后的实时通知。

Jenkins 构建 AWS Fargate 服务的实现代码详解

Python 更新服务脚本

#!/usr/bin/python3
import boto3
import os
import requests
import json

def get_secret(secret_name, region_name):
    """
    从AWS Secrets Manager获取指定的secret。
    """
    session = boto3.session.Session()
    client = session.client(service_name='secretsmanager', region_name=region_name)
    get_secret_value_response = client.get_secret_value(SecretId=secret_name)
    return json.loads(get_secret_value_response['SecretString'])

def send_dingding_message(service_name, token):
    """
    向DingDing发送一条消息,通知服务重启成功。
    """
    headers = {'Content-Type': 'application/json'}
    data = {
        "msgtype": "markdown",
        "markdown": {
            "title": f"Restart {service_name} Success",
            "text": f"<font face='黑体' color='#00EC00'>Restart {service_name} 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 restart_services(cluster_name, service_names, task_definition, token):
    """
    重启指定的ECS服务,并向DingDing发送通知。
    """
    client = boto3.client('ecs')
    for service_name in service_names:
        client.update_service(
            cluster=cluster_name,
            service=service_name,
            taskDefinition=task_definition,
            forceNewDeployment=True
        )
        send_dingding_message(service_name, token)

def get_task_definition(cluster_name, service_name):
    """
    获取指定服务的任务定义。
    """
    client = boto3.client('ecs')
    response = client.describe_services(
        cluster=cluster_name,
        services=[service_name]
    )
    return response['services'][0]['taskDefinition']

def get_task_name(task_definition):
    """
    从任务定义的ARN中获取任务名称。
    """
    return task_definition.split('/')[-1].split(':')[0]

# 从环境变量获取集群名称和服务名称列表
cluster_name = 'pro'
service_names = os.environ['SERVICE_NAMES'].split(',')
service_name = service_names[0]  # 获取第一个服务名称以获取任务定义

task_definition = get_task_definition(cluster_name, service_name)
task_name = get_task_name(task_definition)

# 从Secrets Manager获取DingDing token
secrets = get_secret('base', 'us-east-1')
token = secrets['BUILD1_TOKEN']

restart_services(cluster_name, service_names, task_name, token)

使用 Extended Choice Parameter 进行参数化构建

在 Jenkins Job 的配置中,使用 Extended Choice Parameter 插件,定义了一个名为 SERVICE_NAMES 的参数,其值为要构建和更新的 Fargate 服务的名称列表。

Extended Choice Parameter:
- Name: SERVICE_NAMES
- Type: Single Select
- Choices: pro-os-trade,pro-gin-action-be,pro-appmetrics

总结

通过 Jenkins 构建 AWS Fargate 服务的自动化流程,我们实现了对 Fargate 服务更新控制的一体化解决方案。使用参数化构建,我们可以轻松选择并部署特定的 Fargate 服务,同时通过 DingDing 机器人实时通知,提高了构建过程的可视化和沟通效果。这种自动化流程不仅减轻了开发人员的负担,还提高了整个团队的工作效率。

标签:task,Fargate,service,AWS,Jenkins,name
From: https://blog.51cto.com/jiemei/8843466

相关文章

  • devops:jenkins的简单配置(实现普通CI)
    一、实现自动部署思路 二、jenkins配置1、需要在jenkins中配置好maven和jdk,用于编译代码,将获取的代码编译成jar包。(1)maven需要配置代理仓库,在通过mv命令将maven和jdk移动到jenkins中的data目录下方便引用maven配置:<mirror><id>alimaven</id><name>aliy......
  • AWS云服务器EC2实例实现ByConity快速部署
    1.前言亚马逊是全球最大的在线零售商和云计算服务提供商。AWS云服务器在全球范围内都备受推崇,被众多业内人士誉为“云计算服务的行业标准”。在国内,亚马逊AWS也以其卓越的性能和服务满足了众多用户的需求,拥有着较高的市场份额和竞争力。同时也是出海用户的首选云服务。作为一款主......
  • AWS Lambda
    创建访问密钥copyKey和Secret,key见下图,secret只有在创建时可见创建Nodejs项目app.jsexports.handler=async(event,context)=>{constresponse={statusCode:200,headers:{'Content-Type':'text/plain',},......
  • 使用 AWS Go SDK 读取审计日志(CloudTrail)
    背景公司的海外业务需要将云上的操作读取到内部的日志文件中,永久保存,供内部审计使用。由于之前没有用过AWS相关的SDK,在使用过程中也遇到一些困难,这里记录一下,并且总结一下过程。代码快速开始代码参考地址:https://github.com/awsdocs/aws-doc-sdk-examples/blob/main/go/examp......
  • ubuntu 下 docker 中部署 jenkins,并配置安卓 python 开发环境
    1、ubuntu中下载AndroidSdk#安装unzip工具sudoaptupdatesudoaptinstallunzip#下载AndroidSDKwgethttps://dl.google.com/android/repository/commandlinetools-linux-7302050_latest.zip#解压unzipcommandlinetools-linux-7302050_latest.zip-dandroid......
  • CICD 小提示:Jenkins 部署在 Kubernetes 集群中如何暴露服务?
    本文是 此长文中的部分内容,方便初学者照着操作。Jenkins部署详细步骤略,参考文章:https://md.huanghuanhui.com/RuoYi-Cloud/RuoYi-Cloud.html服务暴露细节Jenkins共需要暴露两个服务到外部,一个是web服务,用于管理操作,默认使用8080端口,另一个为Agent连接的服务,默认使用5000......
  • pytest + yaml 框架 -60.git+jenkins+allure+钉钉通知反馈
    前言当我们自动化用例写完后,接下来就是如何运行用例,生成报告以及反馈通知了。如果你们公司已经有jenkins了,那么直接集成到jenkins上构建你的自动化任务是非常方便的。用例上传git仓库第一步,将写好的自动化用例,上传到本公司的git仓库。jenkins自动拉取仓库代码在jenkins上......
  • devops步骤 -- jenkins安装
    安装的docker-compose##安装步骤参考:编写docker-compose.ymlversion:'3'services:#集合docker_jenkins:user:root#为了避免一些权限问题在这我使用了rootrestart:always......
  • Jenkins搭建步骤
    Jenkins搭建步骤1、下载jenkins镜像jenkins需要依赖jdk环境,所以我们直接下载带JDK的jenkins镜像,如下图dockerpulljenkins/jenkins:jdk11`2、创建jenkins容器下面是创建jenkins容器的docker命令,解释一下创建参数dockerrun-p8087:8080--restart=always-v/etc/localt......
  • 使用AWS CLI精通AWS ECS:部署和管理的综合指南
    亚马逊弹性容器服务(AmazonElasticContainerService,ECS)为部署和管理容器化应用提供了强大的平台。在本指南中,我们将通过AWS命令行界面(CLI)探讨如何无缝地执行常见的ECS任务。无论您是初学者还是经验丰富的用户,本逐步教程都将帮助您轻松地导航ECS集群、任务和服务。先决条件在我们......