【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

基于 Amazon EC2 Container Service 的持续集成 / 持续交付解决方案

  • 2019-11-13
  • 本文字数:2557 字

    阅读完需:约 8 分钟

基于Amazon EC2 Container Service的持续集成/持续交付解决方案

互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(Continuous integration,简称 CI)和持续交付(Continuous delivery,简称 CD)。



通过 CI/CD 构建自动化的代码交付管道,可以实现:


(1) 快速交付。通过 CI/CD 自动化软件发布的过程,可以更快速地发布新的功能,快速迭代反馈并让新功能更快提供给客户。


(2) 提高质量。自动化构建、测试和发布过程致使可以轻松测试每次代码更改并捕捉易于修复的小型漏洞,通过标准化发布过程运行每一项更改,从而保证应用程序或基础设施代码的质量。


(3) 可配置工作流。通过图形用户界面模拟软件发布过程的各个阶段。

容器

本文涉及到的另外一个概念是容器,相信大家都已经不再陌生,并且很多朋友已经在自己的环境中有实际的运行、部署基于容器的应用,这边简单的回顾下容器的几个重要优势:


一是因为容器可以跨平台,从而让程序猿可以享受到研发生产环境一致性的便利,也就是 DevOps。在没有容器之前,常常一个应用做好了在笔记本上可以运转起来,在数据中心就运转不起来,因为操作系统版本不同、库版本不对;或者有的时候生产环境里出现了问题,在笔记本的开发环境中复制不出来。有了容器之后,这些问题就大大减少了。


其二,容器在虚拟机里面可以大幅度提升资源利用率。因为一旦把应用容器化,虚拟机资源就可以通过部署多个容器而得到充分利用,而不是每一个应用去申请一个虚拟机,造成资源的浪费。

Amazon ECS/ECR

Amazon EC2 Container Service (ECS)是一个托管的容器集群管理和调度服务, 可使您在 Amazon EC2 实例集群中轻松运行和管理支持 Docker 的应用程序。


使用 Amazon ECS 后,您不再需要安装、操作、扩展您自己的集群管理基础设施,可以根据资源需求和可用性要求在集群中安排支持 Docker 的应用程序。借助 Amazon ECS,您可以从一个容器扩展到覆盖数百个实例的数千个容器,而运行应用程序的方式并不会因此而变得复杂。您可以运行包括应用程序、批量作业和微服务在内的任何东西。Amazon ECS 将基础设施的一切复杂因素全部消除,让您能够集中精力设计、开发、运行容器化应用程序。


Amazon EC2 Container Registry (ECR) 是完全托管的 Docker 镜像仓库,可以让开发人员轻松存储、管理和部署 Docker 容器映像。Amazon ECR 集成在 Amazon EC2 Container Service (ECS) 中,从而简化产品工作流的开发。

本文主要介绍如何在 AWS 云上,使用 Jenkins 快速构建针对容器应用的持续集成/持续交付管道。

下图是整个 CI/CD 的流程图:



  1. 开发者 commit/push 新版本的软件工程到 GitHub 仓库

  2. GitHub 的 webhook 触发 Jenkins 预先定义好的构建 Pipeline

  3. Jenkins 下载 GitHub,并基于下载的 DockerFile 构建新的 docker 镜像并上传 ECR 仓库

  4. Jenkins 调用 aws cli 更新 ECS 的 task definition 引用新的 docker 镜像并更新相关的 service

  5. ECS 基于新的 service 配置更新集群中的 container


可以看到,整个代码的发布过程,开发人员只需要在本地开发新版本的软件并提交到 GitHub,之后的一系列代码构建、部署等过程可以完全实现自动化,无需人为干预,大大提高了软件迭代的速度,为敏捷开发、微服务化提供支持,同时,可以根据需要添加测试步骤、代码审查、人工审批等步骤,构建一条更为强大灵活的代码交付流程。


  1. 准备工作启动一台 EC2 用于安装 jenkins,本例使用 Amazon Linux AMI,建议分配 EIP(52.34.X.X),并且赋予合适 role 使其能够操作 ECR 和 ECS

  2. 安装 java jdk 1.8

  3. 安装并运行 docker daemon,

  4. col 1


  5. yum install docker –y

  6. chkconfig docker on

  7. service docker start

  8. 安装并运行 jenkins

  9. col 1


  10. wget -O /etc/yum.repos.d/jenkins.repo http://jenkins-ci.org/redhat/jenkins.reporpm –import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.keyyum install jenkins

  11. chkconfig jenkins on

  12. service jenkins start

  13. 将 jenkins 用户加入 docker 用户组,使其拥有 docker cli 执行权限

  14. col 1


  15. usermod -a -G docker jenkins

  16. 安装 git,jq

  17. col 1


  18. yum install git jq –y


第一步 配置 GitHub 与 Jenkins 联动


生成 GitHub token,用于 jenkins 访问 GitHub



记录下生成的 token 字符串



为需要做 CI/CD 的 GitHub 创建 hook,实现代码更新自动通知 Jenkins,Payload URL 设置 Jenkins Server 的地址,默认 Jenkins 监听 8080 端口




第二步 配置 Jenkins 的构建步骤


在浏览器中输入 jenkins server 的地址(52.34.X.X:8080),开始配置 jenkins


初始化登入



安装推荐的插件



安装 CloudBees Docker Build and Publish plugin,用于构建 docker 镜像并上传到 ECR 仓库




配置 github 插件,使得 jenkins 能够连接到 github



点击 Add GitHub Server 增加 GitHub 服务器,并添加 Credentials



在 Secret 中输入之前记录的 GitHub Personal Access Token



点击 Test connection 测试连通性



创建 jenkins 项目



设置 GitHub 项目路径



源代码管理选择 Git



勾选 GitHub hook trigger for GITScm polling,使得 github 项目的更改自动触发构建行为



添加三个构建步骤


第一个步骤为通过 aws cli 登入 ECR 仓库



第二个步骤为通过 CloudBees Docker Build and Publish plugin 构建 docker 镜像并上传到 ECR 中



第三个步骤为通过脚本注册新的 ECS task definition 并更新 service,实现服务部署,详细代码可以从如下链接获取


https://s3.cn-north-1.amazonaws.com.cn/junyublog/buildstep3.sh



第三步 测试


https://github.com/iwasnobody/ecs-cicd-jenkins


本例使用的 GitHub 工程对外提供一个 apache PHP 的静态页面



在本地 PC 上 clone 下工程兵修改工程下的 src/index.php 文件



commit 并 push 到 GitHub 上



Jenkins 界面可以看到自动触发了一次新的构建



查看新的镜像已经被上传到 ECR



查看 jenkins 创建了新版本的 task definition



查看 service 已经引用了新版本的 task definition



访问应用,确认已经更新到最新版



作者介绍



余骏,AWS 解决方案架构师,负责基于 AWS 的云计算方案架构的咨询和设计,同时致力于 AWS 云服务在国内的应用和推广。在加入 AWS 之前,他在思科中国担任系统工程师,负责方案咨询和架构设计,在企业私有云和基础网络方面有丰富经验。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/continuous-integrationcontinuous-delivery-solution-based-on-aws-ecs/


2019-11-13 08:00995

评论

发布
暂无评论
发现更多内容

Prompt learning 教学[进阶篇]:简介Prompt框架并给出自然语言处理技术:Few-Shot Prompting、Self-Consistency等;项目实战搭建知识库内容机器人

汀丶人工智能

人工智能 深度学习 ChatGPT prompt learning

京东短网址高可用提升最佳实践 | 京东云技术团队

京东科技开发者

最佳实践 高可用设计 企业号 5 月 PK 榜 短网址

BATM面试Java岗:精选200+面试题及答案、6大重点规划和经验总结

Java你猿哥

Java MySQL JVM 多线程 java面试

以数据思维和技能提升数据应用测试实践 | 京东云技术团队

京东科技开发者

测试 测试覆盖率 数据思维 应用安全测试 企业号 5 月 PK 榜

Django查询、删除、更新数据

测吧(北京)科技有限公司

测试

开源轻量级 IM 框架 MobileIMSDK 的Uniapp客户端库已发布

JackJiang

网络编程 即时通讯 即时通讯IM

微信小程序二维码文件流上传到OSS解决方法

北桥苏

php OSS thinkphp

国内商业BI工具介绍,瓴羊Quick BI、帆软怎么样

流量猫猫头

从零开始打造一款基于SpringBoot+SpringCloud的后台权限管理系统

做梦都在改BUG

Java Spring Cloud Spring Boot 权限管理

【源码分析】【seata】at 模式分布式事务-server端与客户端交互

如果晴天

源码分析 分布式事务 分布式锁 seata Seata框架

2023 开源之夏来啦!报名 MegEngine 项目,赢取万元奖金!

MegEngineBot

深度学习 开源之夏 MegEngine 学生比赛 奖金

Django基本数据访问

测吧(北京)科技有限公司

测试

ZeroErr 零误框架

西风逍遥游

Elasticsearch分布式搜索引擎的基本使用

北桥苏

php elasticsearch

夺冠秘诀?华为软件精英挑战赛两届冠军这样复盘比赛经验

华为云开发者联盟

云计算 华为云 华为云开发者联盟 企业号 5 月 PK 榜

中国20强(上市)游戏公司2022年财报分析:营收结构优化,市场竞争进入白热化

易观分析

公司 游戏

MySQL主从配置+ThinkPHP5分布式数据库

北桥苏

MySQL 分布式 thinkphp

跑步课程导入能力,助力科学训练

HMS Core

HMS Core

面试官:说说 WebSocket 和 Socket 及 Http 的区别?

Java你猿哥

Java TCP ssm HTTP webSock

网页版超强ChatGPT插件应用ZipZap来了,每日免费10K Token足够使用

Ricky

openai ChatGPT GPT-4

中建信息亮相华为中国合作伙伴大会2023

Geek_2d6073

2023 年最新 Java 面试必背八股文,1338 道最新大厂架构面试题

架构师之道

Java 面试

Alibaba技术专家倾心五年打造!Java工程师成神之路(基础篇)

做梦都在改BUG

Java

数据库外网ip binlog主从配置

Java你猿哥

Java MySQL 后端 ssm

大厂工作四年Java经验总结了学习路线规划,所有私藏资料我都贡献出来了

Java你猿哥

Java Spring Boot JVM java基础 java面

重磅来袭!微服务的里程碑SpringCloudAlibaba

做梦都在改BUG

Java 架构 微服务 Spring Cloud spring cloud alibaba

AntDB数据库携手金蝶Apusic应用服务器, 共促信创产业繁荣发展

亚信AntDB数据库

AntDB AntDB数据库 企业号 5 月 PK 榜

Fabarta 参加 2023 数云原力大会,与各方共同发布《2023 数据资产盘点实践白皮书》

Fabarta

数据要素 数据资产管理 数据资产化 数据要素流通

大模型时代入场级技能:提示词工程!百度文心中文教程来啦

飞桨PaddlePaddle

百度飞桨

Windows本地搭建RabbitMQ Server

北桥苏

Rabbit MQ RabbitMQ安装

Java面试题大全(整理版)1000+面试题附答案详解最全面看完稳了

Java你猿哥

Java MySQL redis mybatis java面试

基于Amazon EC2 Container Service的持续集成/持续交付解决方案_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章