简介:Jenkins 由于其开源特性以及丰富插件能力,长久以来都是中小企业搭建 CICD 流程的首选。不过 Jenkins 存在维护成本高、配置复杂等缺点,云效 Flow 较好地解决了这些问题。 本文从一个 Java 应用部署到云服务器(ECS)的场景切入,对比使用阿里云云效流水线 Flow 和 Jenkins 两种构建部署方式,供大家选型参考。
随着计算机技术和业务不断发展,企业软件规模越来越庞大,交付越来越复杂。持续交付 DevOps 解决方案逐渐深入人心,成为企业开发者研发模式首选。
市面上存在多种多样的 CICD 工具,不同的工具有不同特点。从开源的本地工具 Jenkins、TeamCity,到云端免费工具 Travis CI、Github Action,到如今云原生时代专注于 Kubernetes 的 ArgoCD、Tekton Pipeline。
Jenkins 由于其开源特性以及丰富插件能力,长久以来都是中小企业搭建 CICD 流程的首选。不过 Jenkins 存在维护成本高、配置复杂等缺点,云效 Flow 较好地解决了这些问题。
本文从一个 Java 应用部署到云服务器(ECS)的场景切入,对比使用阿里云云效流水线 Flow 和 Jenkins 两种构建部署方式,供大家选型参考。
需求分析
当前我们有一个存放 Java 代码的仓库,需要对源代码进行构建,获得构建产物并将构建产物部署到云服务器(ECS)组。该过程简单抽象如下:
流程拆分
环境准备
Flow
Flow 作为一个 SaaS 服务,开箱即用。用户只需要一个阿里云账号即可开启持续交付之旅。
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
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
构建、部署配置
Flow
a. 选择 Java · 构建、部署到阿里云ECS/自有主机 模板
Jenkins
a. 访问 http://xxxx:8081/newJob 开始新建任务
小结
此时我们在 Jenkins 走通了 Clone git repo -> Mvn Build -> Deploy To ECS的流程。
Flow | Jenkins | |
环境准备 |
|
|
主机组配置 |
|
|
构建配置 |
|
|
部署配置 |
|
|
可以看到 Flow 在软件持续交付的场景下做了非常多好用的功能,使用户可以将精力收敛于业务逻辑本身。
原文链接
本文为阿里云原创内容,未经允许不得转载。