上一篇介绍了在云效平台导入代码的教程,本篇是整个教程的重点,使用云效平台实现CI/CD功能。
简介
什么是流水线
流水线有三个重要的概念,源、构建、部署,简单理解就是选择流水线的原材料,添加制作原材料的步骤,输出成品。
在这里原材料就是源代码或者与源代码相关的必要附件。制作步骤就是对源代码进行编译、打包等操作,如果是PHP等解释型语言就可以省略打包等操作。输出就是将处理好的源代码部署到线上。
创建流水线
云效平台的流水线功能就是CI/CD。
从导入的代码库中创建
1.从模板创建
第一次接触CI/CD的推荐使用模板,有利于更快的理解和使用平台。这里以部署java web项目为例。
云效平台提供了常用开发语言构建CI/CD的模板,如java、python、node.js等。推荐新手使用符合自己的模板搭建CI/CD,如果对CI/CD很熟当然可以选择空模板自行搭建。
1.1.进入要构建流水线的库
点击 创建流水线 生成一条新的流水线配置
1.2.选择java构建到阿里云ecs模板
1.2.1 设置流水线源
这里设置要发布的代码、分支。一般只需要设置仓库、分支即可
1.2.2 配置构建步骤
这一步是将java项目进行打包编译,只需要关注构建和上传这两步
2.2.1 构建
构建也比较简单,以maven项目为例。通常我们都是用IDEA直接打包成jar文件了,这里只需要把IDEA打包的命令放在这里即可。
在构建命令里输入mvn package
2.2.2 上传
这里要注意设置正确的上传文件。
我发布的项目结构是maven多模块的,这里需要选择分支下真正对外服务的模块的打包文件。例如我的api模块是真正对外提供web服务的,这里我就设置成上传api模块下的jar文件。
1.2.3 配置部署步骤
部署阶段主要有三步,一是选择要拉取的制品(上一步上传的文件),二是选择要部署的主机,三是配置部署的命令。
部署阶段的前两步都简单,只需要选择即可。具体的部署命令要稍微复杂点。
首先指定把云效平台打包后的文件下载到主机的位置和命名,然后使用shell脚本配置部署。
具体的shell脚本
我这里的shell脚本写的比较长,其实主要的逻辑就是先解压下载的制品,判断是否有进程在执行,如果有就直接kill,然后用新解压的jar文件启动项目。
我这个shell脚本中的很多逻辑都是为了处理文件的,如果对项目目录的整洁度没有要求就可以省去很多代码。
if [ ! -d "/home/admin/application" ]
then
mkdir -p /home/admin/application
echo "create dir /home/admin/application"
fi
if [ ! -d "/www/web/backend" ]
then
mkdir -p /www/web/backend
echo "create dir /www/web/backend"
fi
if [ ! -f "/home/admin/application/package.tgz" ]
then
echo "upload file failed"
else
tar zxvf /home/admin/application/package.tgz -C /www/web/backend/
fi
if [ -f "/www/web/backend/backend.jar" ]
then
rm -f "/www/web/backend/backend.jar"
fi
if [ -f "/www/web/backend/api-0.0.1-SNAPSHOT.jar" ]
then
mv /www/web/backend/api-0.0.1-SNAPSHOT.jar /www/web/backend/backend.jar
cd /www/web/backend/
ID=`ps -ef | grep 'java -jar backend.jar' | grep -v grep | awk '{print $2}'`
echo $ID
for id in $ID
do
kill -9 $id
echo "kill $id"
done
nohup java -jar backend.jar > /tmp/backend-launch.log 2>&1 &
else
echo "file not exist /www/web/backend/api-0.0.1-SNAPSHOT.jar"
fi
2.从空模板创建
类似PHP或者vue前端项目在构建和部署时都比较简单,没有复杂的构建和启动命令,使用空模板比较合适。
只要配置好构建和部署阶段操作文件的命令就会比较顺利创建出流水线。
3.运行流水线
完成部署的配置后就可以保存流水线了
补充
流水线的插件
在构建和部署阶段都有插件可以设置,主要是对流水线执行阶段进行通知。推荐可以都配置一个邮件通知的插件,这样每次发布都会有相应的通知,可以实时掌握项目发布进度。