乐趣区

关于jenkins:Flow-vs-Jenkins-实操对比如何将Java应用快速发布至ECS

随着计算机技术和业务一直倒退,企业软件规模越来越宏大,交付越来越简单。继续交付 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-… Spring Boot 工程为例,须要有一个提供 java、maven 构建指令的运行环境进行 mvn build,将生成的 jar 包同步到服务器组上,执行利用启动命令(如 /home/admin/app/deploy.sh restart),将利用启动。
流程拆分

环境筹备

Flow

Flow 作为一个 SaaS 服务,开箱即用。用户只须要一个阿里云账号即可开启继续交付之旅。


在 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/…

拜访 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-de… 工作日志详情页,能够看到 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/docum…


对于咱们

理解更多对于云效 DevOps 的最新动静,可微信搜寻关注【云效】公众号;

彩蛋:公众号后盾回复【指南】,可取得《阿里巴巴 DevOps 实际指南》&《10 倍研发效力晋升案例集》;

看完感觉对您有所帮忙别忘记点赞、珍藏和关注呦;

退出移动版