基于springboot的多环境应用CI/CD应用实践
基于springboot的多环境应用CI/CD应用实践
- 持续集成/部署应用实践
- 1.jenkins配置
- 2.Gitlab配置
- 3.代码的自动编译打包
- 4.docker容器编排
- 5.jenkins执行docker-compose命令
持续集成/部署应用实践
本项目基于原生开源框架springCloud开发,由于eureka 2.0停更,注册中心已更换为nacos,另外也集成启用了nacos的配置中心功能。为了实现应用的自动化打包部署,我们基于springboot对多环境配置的支持,结合git+gitlab+jenkins+maven+docker+harbor+docker-compose等工具达到目的。
各个工具的安装配置是第一步,网上的安装手册很多,这里就不再赘述,直接来看持续集成发布的配置过程。
1.jenkins配置
首先,在jenkins中新建项目——“构建一个自由风格的软件项目”,关联上Gitlab上的地址,并添加用来拉取代码git账户。
然后,构建触发器选择 “Build when a change is pushed to GitLab” ,注意: 复制出 URL 和 Token,我们后面配置 Gitlab 的 Webhook 会用到。
另外,在jenkins中配置环境变量参数用于区分测试环境、生产环境。
在Post steps阶段,将配置文件参数替换、docker镜像制作、上传镜像仓库等命令填入到 “execute shell”中。
#!/bin/bash
echo $version $config
#使用sed替换启动配置文件中的字符串,设置为test/prod环境
sed -i "s/"@profilesActive@"/$config/g" src/main/resources/bootstrap.yml
# 多环境配置通过bootstrap-dev.yml、bootstrap-test.yml、bootstrap-prod.yml进行区分
/opt/apache-maven-3.5.0/bin/mvn -U -Dmaven.test.failure.ignore clean package -P$config
rm -f src/main/resources/bootstrap.yml
# 使用项目根目录下的Dockerfile文件构建镜像
docker build -t 192.168.1.88:8022/ebid/$JOB_BASE_NAME-$config .
docker tag 192.168.1.88:8022/ebid/$JOB_BASE_NAME-$config 192.168.1.88:8022/ebid/$JOB_BASE_NAME-$config:$version
# 上传本地镜像至远程私有仓库harbor
# push命令需要使用docker login先登录harbor私仓,登录一次会在~/.docker/config.json 中生成 auth 串
# 在后续对docker进行pull和push的时候,这个auth就是凭证,后续不需要再登录
docker push 192.168.1.88:8022/ebid/$JOB_BASE_NAME-$config
docker push 192.168.1.88:8022/ebid/$JOB_BASE_NAME-$config:$version
# 删除本地镜像
docker image rm -f 192.168.1.88:8022/ebid/$JOB_BASE_NAME-$config
docker image rm -f 192.168.1.88:8022/ebid/$JOB_BASE_NAME-$config:$version
最后点击保存,则jenkins持续集成配置完成。
2.Gitlab配置
首先,打开 Gitlab 的 Repo 的 Settings-Integrations。
然后,URL 和 Secret Token 填写 Jenkins 项目中构建触发器部分生成的(见图1),点击 “Add webhook”,即完成配置!
3.代码的自动编译打包
在前两个步骤完成后,一旦工程项目中有merge命令提交,则gitlab将会自动发起jenkins里的项目构建请求,进而触发项目编译、项目打包、启动文件配置参数替换、docker镜像制作、docker镜像标记、docker镜像推送等一系列操作。
4.docker容器编排
docker镜像发布到远程私有仓库地址后,接下来到了发布环节。由于项目涉及到数十个服务,为了管理方便,安装docker-compose工具来对docker容器进行管理编排工作。
#docker-compose.yml文件单个服务的配置节选
ebid-bjca:container_name: ebid-bjcaimage: 192.168.1.88:8022/ebid/ebid-bjca-${config}restart: alwaysports:- "9530:9530"networks:- "ebid"environment:- JAVA_ARGS=-server -Xms128M -Xmx128M -Xmn64Mvolumes:- /etc/localtime:/etc/localtime- ./logs/ebid-bjca:/opt/run/logs
5.jenkins执行docker-compose命令
在前4步完成后,镜像已经上传到私仓,docker-compose命令也已经编辑好,最后一步就是执行docker-compose命令。在这里继续使用jenkins,进入到服务器中,并通过docker-compose命令拉取镜像和启动容器。
通过以上5个步骤,就完成了项目的持续集成与部署,部分细节有简化处理,如有疑问,欢迎交流~
基于springboot的多环境应用CI/CD应用实践相关推荐
- 中国.NET开发者峰会特别活动-基于k8s的微服务和CI/CD动手实践报名
2019.11.9 的中国.NET开发者峰会将在上海举办,到目前为止,大会的主题基本确定,这两天就会和大家会面,很多社区的同学基于对社区的信任在我们议题没有确定的情况下已经购票超过了300张,而且分享 ...
- OpenShift 4 Hands-on Lab (8) 基于Gogs+Nexus+Sonarqube的Jenkins CI/CD Pipeline
<OpenShift 4.x HOL教程汇总> 说明:本文已经在 OpenShift 4.8 环境中验证(OpenShift 4.9 环境的 Jenkins 版本较新,编译 Java 报错 ...
- OpenShift 4之实现一个基于Gogs+Nexus+Sonarqube的Jenkins CI/CD Pipeline
OpenShift 4之实现一个基于Gogs+Nexus+Sonarqube的Jenkins CI/CD Pipeline 场景说明 运行环境 配置操作过程 准备运行所需资源 配置Gogs并导入应用代 ...
- 基于OpenStack+Docker设计与实现CI/CD
本文所述内容的背景是,基于Docker容器技术的OpenStack研发.测试.运维及其相关的CI/CD.DevOps等活动.思想是相通的,读者可以取其可用部分用于自己的业务需求中. IaaS云和容器云 ...
- 毕设—基于树莓派的家居环境智能监测系统设计与实践
一.资料查找工具 英文文献:Sci-Hub | Academic Navigation Site – To remove all barriers in the way of science 中文文献 ...
- 实施有效有价值的CI / CD流水线实践分享
原文地址: https://medium.com/@sanjayaben/how-to-build-an-efficient-ci-cd-pipeline-b5738ad567c8 我觉得这篇文章 ...
- 中通物流基于 KubeSphere 在生产环境的开发与部署实践
背景 中通物流是国内业务规模较大,第一方阵中发展较快的快递企业.2019年,中通各类系统产生的数据流以亿计,各类物理机和虚拟机成千上万,在线微服务更是数不胜数.如此庞大的管理,使得中通业务发展不可持续 ...
- 猪八戒网CI/CD最佳实践之路
序言 本文旨在介绍ZBJ DevOps团队倾力打造的DevOps平台中关于CI/CD流水线部分的实践.历经三次大版本迭代更新的流水线,完美切合ZBJ各种业务发展需求,在满足高频率交付的同时,提高了研发 ...
- CI/CD 最佳实践的基本原则
持续集成和持续部署(CI/CD)是许多组织使用的敏捷方法.它正在帮助这些组织有效.安全地发行软件. 根据 GitLab 2020 DevSecOps 调查,几乎 83%的开发人员表示,他们正在比以前更 ...
最新文章
- 如何让项目一步步走向灭亡
- Item 36. Class-Specific Memory Management
- SecureCRT快捷键
- 北京大学AI写作机器人来了,会替代记者?
- linux学习(7)-压缩与解压缩
- 编写一个程序实现方法的覆盖java_编写Java程序代码必须先声明一个____,然后在其中编写实现需求的业务代码。...
- MS CRM 2011 如何创建基于SQL的自定义报表,并使用数据预筛选(Pre-Filtering)
- 六下计算机教学总结,六年级信息技术教师教学工作总结
- MySQL 重置密码
- win10开机登录不需要密码默认账号
- Mendeley-一款免费好用的文献管理软件
- 老罗如果输了整个民族都输了
- 为啥UI设计的值放到android studio中显示不准确?
- opencv26:霍夫直线变换
- 颜色和移动物体识别系统
- signal 11 linux,signal 11 (SIGSEGV)错误排查
- Episode II 计算机病毒概论
- Promise.all()、Promise.allSettled()、Promise.any()、Promise.race()用法与区别
- 赫兹 (单位) Hz
- 使用Markdown和Latex写数学公式
热门文章
- Fast Global Registration (ECCV 2016) 论文解析
- Android屏幕旋转,android实战项目实例
- 盛世昊通携手国澳(深圳)新能源有限公司打造充电桩产业链
- 诺基亚6微信不能连接服务器,诺基亚6微信打开链接输入数字就卡死
- 录音软件哪个好?当然是最专业最好用的。
- 云计算机根据部署方式,云计算的三种类型及部署模式
- 如何打造高性能大数据分析平台
- 2020.3.2 Linux文件和目录
- 宇宙会好吗——《三体》之《地球往事》后记
- python运行脚本被杀死_从python异常中杀死Bash脚本