跳至主要內容

后端项目流水线部署

杨轩-国实信息大约 3 分钟CI/CD

为简化后端项目部署流程,以及对整个项目运行的服务进行管理,部署了一套后端CI/CD工具。

使用工具

整个流程使用到的工具包括:

  • Docker:运行docker镜像,项目打包为docker镜像
  • Harbor:私有docker镜像存储
  • Portainer:docker可视化管理界面
  • Jenkins:项目发布工具

系统在线地址:

在线地址用户名密码
Docker运行于10.16.129.49服务器
Harborhttp://10.16.129.49:7788adminHarbor12345
Portainerhttp://10.16.129.49:8999admin111111111111
Jenkinshttp://10.16.129.49:7790/adminadmin123456

发布流程

jenkins创建项目

在jenkis主页点击新建任务

General

因为我们目前的项目都是多git分支的,所以添加一个参数化构建过程,参数类型选择为分支

源码管理

关联项目的gitlab仓库地址:

指定分支部分填写 ${branch},这样可以使用选择的分支打包。

这里关联仓库后要添加一个Credentials凭据,这里可以直接使用我创建好的凭据,如果这个账户没有这个仓库的权限的话那么需要手动创建一个凭据,创建凭据的类型选择GitLab API TOKEN,这个token在gitlab的个人设置里生成。

Build

基于pom.xml构建maven项目,并填写打包指令:

项目使用的私服配置已经在jenkins的maven全局配置中设置好了,所以直接使用默认就可以:

PostStep

这个步骤是用于构建完成后,要执行的指令。这里我们要完成的工作主要有下面几个:

  • 把jenkins打好的包制作成jenkins镜像
  • 把镜像上传到Harbor私有镜像仓库
  • 删除原先运行中的同名镜像(如果有的话),并基于新镜像在docker内运行

由于当前jenkins本身就是基于docker部署的,镜像内部没有运行docker的环境,所以我们选择在远程主机运行脚本执行上面的流程,也就是在Add post-build step的时候选择Execute shell script on remote host using ssh

示例脚本:

SHORTNAME='data-engine'
PRO_VERSION='0.0.1-SNAPSHOT'

DATE=`date +"%Y%m%d%H%M%S"`
REPOSITORY=$HARBOR/$HARBOR_LIB/${JOB_BASE_NAME}:$DATE

cd $MY_WORKSPACE/${JOB_BASE_NAME}
cat > Dockerfile <<EOF
FROM openjdk:8
COPY ${JOB_BASE_NAME}-server/target/${JOB_BASE_NAME}-server-$PRO_VERSION.jar /app.jar
EXPOSE 8088
ENTRYPOINT ["nohup","java","-jar","/app.jar","&"]
EOF

docker build -t $REPOSITORY .
docker login http://$HARBOR -u $HARBOR_USER -p $HARBOR_PWD
docker push $REPOSITORY
docker logout http://$HARBOR
docker rm -f $SHORTNAME | true
docker container run -d --name $SHORTNAME -p 8088:8088 $REPOSITORY

上面的SHORTNAMEPRO_VERSION改称我们项目实际的即可。

重点看一下下面这一句拷贝:

COPY ${JOB_BASE_NAME}-server/target/${JOB_BASE_NAME}-server-$PRO_VERSION.jar /app.jar

由于我们现在的项目一般是多个module,以项目名为ocean-data-engine-ser为例,实际打包后运行的jar包就在ocean-data-engine-ser-server下,这里是把这个jar包拷贝过来。看一下下面这个项目结构就明白了:

执行构建

创建后项目后,就可以选择分支进行构建了。

注意:构建项目不要使用上面提供的admin用户,最好每个人使用admin账户登陆进去后建一个自己的账户,使用自己的账户构建,这样后期如果构建历史有问题方便找到责任人。

点击控制台输出可以看到构建日志,最后SUCCESS表示构建成功了:

到这里就已经全部构建结束了,后续步骤可以用来检查是否构建成功。

查看镜像仓库

登录Harbor镜像私服,点击ocean项目,镜像都存在这个项目下面。

点击可以查看详情,查看各个版本的镜像。我们目前镜像的tag是当前的时间戳,也方便后续如果镜像有问题时及时回滚。

Portainer

在Containers中可以看到所有容器,并且可以执行容器的启停、删除等操作。

在Images中可以看到镜像列表: