Flow vs Jenkins 实操对比,如何将Java应用快速发布至ECS

news/2024/7/24 13:36:27 标签: java, jenkins, devops, 阿里云, 云效

随着计算机技术和业务不断发展,企业软件规模越来越庞大,交付越来越复杂。持续交付 DevOps 解决方案逐渐深入人心,成为企业开发者研发模式首选。

市面上存在多种多样的 CICD 工具,不同的工具有不同特点。从开源的本地工具 Jenkins、TeamCity,到云端免费工具 Travis CI、Github Action,到如今云原生时代专注于 Kubernetes 的 ArgoCD、Tekton Pipeline。

Jenkins 由于其开源特性以及丰富插件能力,长久以来都是中小企业搭建 CICD 流程的首选。不过 Jenkins 存在维护成本高、配置复杂等缺点,云效 Flow 较好地解决了这些问题。

本文从一个 Java 应用部署到云服务器(ECS)的场景切入,对比使用阿里云云效流水线 Flow 和 Jenkins 两种构建部署方式,供大家选型参考。

需求分析

当前我们有一个存放 Java 代码的仓库,需要对源代码进行构建,获得构建产物并将构建产物部署到云服务器(ECS)组。该过程简单抽象如下:
在这里插入图片描述
以 Git 仓库 https://code.aliyun.com/flow-example/spring-boot Spring Boot 工程为例,需要有一个提供java、maven构建指令的运行环境进行 mvn build,将生成的 jar 包同步到服务器组上,执行应用启动命令(如 /home/admin/app/deploy.sh restart),将应用启动。
流程拆分

环境准备

Flow

Flow 作为一个 SaaS 服务,开箱即用。用户只需要一个阿里云账号即可开启持续交付之旅。
在Flow平台登陆<a class=阿里云账号后即可新建流水线" />
在Flow平台登陆阿里云账号后即可新建流水线

Jenkins

Jenkins 是一个开源的 CI 工具,用户需要提供机器资源来部署 Jenkins Master 节点。如果需要在公网环境下访问Jenkins页面,通过公网IP或弹性IP等暴露访问地址。以一台阿里云 ECS(Centos 8)为例,安装Jenkins的过程包括:

# 安装 git、java 基础工具
yum install git java 

# 修改 Jenkins 配置,如监听端口等
vim /etc/sysconfig/jenkins

JENKINS_PORT="8081"

# 安装 Jenkins
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo dnf install jenkins
sudo systemctl start jenkins
sudo systemctl enable jenkins
systemctl status jenkins

当Jenkins进程启动后,可以通过机器ip+端口的方式访问,登录到Jenkins页面。

主机组配置

我们将最终 java 应用运行的服务器叫为主机组的概念,它可以包括 n>=1 台服务器。

Flow

Flow 主机组支持两种类型,包括阿里云ECS和能访问公网的阿里云主机。以登录阿里云账号下ECS为例:

a. 访问主机组管理页
在这里插入图片描述

*在「企业设置」中访问主机组管理

b. 点击创建按钮,选择阿里云ECS
在这里插入图片描述
c. 新建服务授权,选择ECS实例
在这里插入图片描述
在这里插入图片描述
此时完成了主机组的配置,后续将会在流水线部署节点里使用。

Jenkins

以通过 ssh private key 访问服务器为例,首先我们需要在机器上生成一对 rsa 密钥,执行一下命令一路回车

ssh-keygen -t rsa -m PEM

在 ~/.ssh 目录下可以看到生成的密钥文件,复制id_rsa私钥的内容

[root@iZbp1614mku6kuzmrnyi6uZ .ssh]# ls -al
总用量 16
drwx------  2 root root   80 5月  30 14:26 .
dr-xr-x---. 7 root root  233 5月  30 14:43 ..
-rw-------  1 root root 1574 5月  30 14:26 authorized_keys
-rw-------  1 root root 2455 5月  30 14:26 id_rsa
-rw-r--r--  1 root root  582 5月  30 14:26 id_rsa.pub
-rw-r--r--  1 root root  173 5月  30 13:55 known_hosts

访问Jenkins 添加 Credentials 配置页,如
http://xxxx:8081/credentials/store/system/domain/_/newCredentials
在这里插入图片描述
访问 remote hosts 配置页,如 http://xxxx:8081/configure ,选择刚创建的 credential,测试connection连通性。
在这里插入图片描述
此时我们完成一台主机的配置(注:Jenkins 与 Java 服务器处于同一网络下,则服务器不需要开放公网访问,否则需要申请配置公网可达的IP)。而 Flow 可通过阿里云云助手下发指令的通道,减少对公网IP或弹性EIP的配置。

构建、部署配置

Flow

a. 选择 Java · 构建、部署到阿里云ECS/自有主机 模板
在这里插入图片描述
b. 添加示例代码库(Java、Spring Boot)
在这里插入图片描述
c. 点击 Java构建上传 任务,可以方便的选择 JDK、Maven 版本,配置构建指令。
在这里插入图片描述
d. 在 构建物上传 任务里,直接输入多个打包路径生成构建制品,如 default
在这里插入图片描述
e. 在部署任务里选择 “下载制品”,勾选已配置的主机组,选定下载制品路径、执行用户和执行指令,点击"保存并允许",触发流水线实例运行。(Flow 支持部署策略如发布暂停、分批发布等特性,参考)
在这里插入图片描述
f. 在构建节点中可以看到, Flow 默认对 mvn 构建使用 http://maven.aliyun.com/ 仓库和对m2缓存来加速构建,免去每次从 nexus 仓库下载 jar导致的耗时。
在这里插入图片描述
g. 在构建物上传步骤可以看到,mvn构建完的工作区中的jar包和deploy.sh被打包后上传到了远端存储中。
在这里插入图片描述
h. 可以在流水线实例页直接下载 default 产物包。
在这里插入图片描述
i. 点击部署任务,可以看到部署详细信息,如部署耗时、日志等。
在这里插入图片描述
在这里插入图片描述
此时我们在 Flow 走通了 Clone git repo -> Mvn Build -> Deploy To ECS的流程。

Jenkins

a. 访问 http://xxxx:8081/newJob 开始新建任务
在这里插入图片描述
b. 配置 git 仓库源地址
在这里插入图片描述
c. 配置 mvn 执行指令,(为了方便走通测试流程,这里我使用同一台机器作为部署Jenkins、Java的构建和部署机器,强烈建议生产环境将Jenkins、应用构建与部署的机器进行隔离)
在这里插入图片描述
d. 保存任务配置,触发任务运行,访问 http://xxxx:8081/job/daily-deploy-test/1/console 任务日志详情页,可以看到 Jenkins 会将代码库 clone 到 /var/lib/jenkins/workspace/daily-deploy-test,执行 mvn 构建与 deploy.sh 脚本
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此时我们在 Jenkins 走通了 Clone git repo -> Mvn Build -> Deploy To ECS的流程。

小结

在这里插入图片描述
可以看到 Flow 在软件持续交付的场景下做了非常多好用的功能,使用户可以将精力收敛于业务逻辑本身。

你的团队是如何做CICD的?欢迎分享

查看实操文档快速上手:https://help.aliyun.com/document_detail/224594.html


关于我们

了解更多关于云效DevOps的最新动态,可微信搜索关注【云效】公众号;

彩蛋:公众号后台回复【指南】,可获得《阿里巴巴DevOps实践指南》&《10倍研发效能提升案例集》;

看完觉得对您有所帮助别忘记点赞、收藏和关注呦;


http://www.niftyadmin.cn/n/1762498.html

相关文章

EurekaLog v7.10.1 EurekaLog

EurekaLog v7.10.1 EurekaLog 是一个用于 Delphi 和 CBuilder 的工具&#xff0c;它使您的应用程序能够捕获每个异常和内存/资源泄漏&#xff0c;生成调用堆栈的详细日志&#xff08;带有单元、过程和行号&#xff09;&#xff0c;可以选择向您发送副本每个日志条目通过电子邮…

从零开始写javaweb框架 (1)

在本篇中我们主要来聊聊在网页的连接过程中&#xff0c;框架分别完成了哪些事情。 当我们输入网址按下回车键&#xff0c;http发送一个请求至web框架 获取所有类的包名&#xff0c;将拥有Service、Controller注解的类加入到Bean容器中对Bean容器中的类通过反射创建实例IOC容器的…

从DevOps到BizDevOps, 研发效能提升的系统方法

注&#xff1a;本文是对云栖大会何勉分享内容的整理&#xff0c;稍有删减&#xff0c;点击文末下方链接观看完整视 云效BizDevOps论坛&#xff1a;https://yunqi.aliyun.com/2021/agenda/session173 这几年“研发效能”一直是热词&#xff0c;很多组织都会启动研发效能提升专项…

IIS 之 IIS 7及以上多域名或端口绑定同一物理目录并设置不同默认文档

今天在 IIS 7 多端口或域名绑定同一物理目录&#xff0c;设置不同的默认文档遇到问题&#xff1a;同一物理目录的多个站点修改任意一个站点默认文档都会一起更改。 原因&#xff1a;在同一个物理目录下只有一个 web.config&#xff0c;并且 IIS7 把默认文档设置写在这里&#x…

源码:winamp播放器 C++

winamp播放器特色 支持格式 Winamp 支持多种音频格式的回放&#xff0c;包括MP3、MP2、MIDI、MOD、AAC、FLAC、Ogg、WAV、WMA等&#xff0c;并且是 Windows 平台下首款可以默认支持 Ogg 的播放软件。 媒体库 用户安装Winamp软件时&#xff0c;软件会检索用户系统中的媒体文件…

源码:三星键盘输入法 安卓开发者福音

三星键盘输入法软件是最新提取的一款三星手机输入法&#xff0c;此款输入法支持多达80多种于洋&#xff0c;强大的文本输入功能&#xff0c;支持文本预测、自动拼音检查、输入法自动切换等功能&#xff0c;三星手机必备输入法 三星键盘输入法软件介绍&#xff1a; 三星键盘输入…

java8--List排序

工作中&#xff0c;有时会需要对集合内的元素进行排序。利用java8&#xff0c;可以很方便的对List内的元素进行正序、倒叙操作~ 对数字排序 //对数字进行排序 List<Integer> nums Arrays.asList(3,1,5,2,9,8,4,10,6,7); nums.sort(Comparator.reverseOrder()); //revers…

云效发布策略指南|滚动、分批、灰度怎么选?

无论从开发运维还是产品运营的角度来看&#xff0c;任何一次上线都是有风险的。从最基本的应用停止导致流量丢失、服务不可用、服务QPS水位下降&#xff0c;到步骤的遗漏、流程的不规范、开发过程中引入的bug&#xff0c;以及新产品/新功能上线导致用户体验的变化&#xff0c;都…