构建企业级Docker+Jenkins+Git+Harbor流水线自动化持续集成持续发布平台
- CI/CD是什么?
- 持续集成(CI)/持续交付(CD)的优势
-
- 自动化部署流程图
- Git Github Gitlab的区别
- 前言:一些自己想说的话
- 部署Docker+Jenkins+Git+Harbor流水线自动化CI/CD
-
- 安装部署Git
- 安装Harbor
- 安装Jenkins
- 关于实验的一些总结
CI/CD是什么?
- CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法
- CI/CD 的核心概念是持续集成、持续交付和持续部署
- 作为一个面向开发和运营团队的解决方案,CI/CD 主要针对在集成新代码时所引发的问题(亦称:“集成地狱”)
持续集成(CI)/持续交付(CD)的优势
持续集成
/持续交付
是现代软件开发周期的基础
- 在传统的软件开发方法中,每个功能更新或修复错误都会每隔一段时间进行发布,这显著增加了在部署时耦合更改的机会
持续集成
/持续交付
可以解决所有这些问题,并使整个过程更易于管理和高效。
- 在现代软件开发实践中,持续集成(CI)/持续交付(CD)是构建、测试应用程序并将其部署到生产中的基础。
- 持续交付(CD)有助于降低风险,并通过
自动化
来自不同项目开发人员的多个代码更改来实现生产一致性。
- 另一方面,
持续交付
使开发人员能够无缝地将集成代码交付到生产中,从而提供快速有效的自动化流程,以向客户轻松发布新功能和更新
持续集成
/持续交付
管道的优势:
- 管理较小的代码更改
- 故障隔离可在短期内防止错误
- 缩短平均解决时间(MTTR)
- 提高测试可靠性
- 加快释放速度
- 减少积压
- 推动客户实现
- 加强团队的透明沟通和责任感
- 降低成本
- 易于维护和更新
- 结论
- 部署CI / CD流程后,您可能会在开发人员工作流程中实现更平滑的过渡
- 关键是,测试质量首先需要在工作流程中引起很多注意,这使您成为其他人可以效仿的灯塔
- 无论您的产品交付有多快和连续,没有质量意识都没有关系
- 当CI / CD管道的更多步骤可以自动化时,质量也意味着更快的质量发布
自动化部署流程图
- 首先,开发人员每天进行代码提交,提交到Git仓库
- 然后,Jenkins作为持续集成工具,使用Git工具到Git仓库拉取代码到集成服务器,再配合JDK, Maven等软件完成代码编译,代码测试与审查,测试,打包等工作,在这个过程中每一步出错,都重新再执行一次整个流程
- 最后,Jenkins把生成的jar或war包分发到测试服务器或者生产服务器,测试人员或用户就可以访问 应用
Git Github Gitlab的区别
Git
是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
- 是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
Github
是在线的基于Git的代码托管服务。GitHub是2008年由Ruby on Rails编写而成。GitHub同时提供付费账户和免费账户。这两种账户都可以创建公开的代码仓库,只有付费账户可以创建私有的代码仓库。Gitlab
解决这个问题,可以在上面创建免费的私人repo。
前言:一些自己想说的话
- 关于实验的开头,本意想使用
Docker
部署Jenkins
,但是在调试Maven
和JDK
的时候一直报错
- 从7月8号到7月9号的凌晨4点,一直报错,各种解决方案已经被我翻烂了…各种问题接踵而至…
- 于是带着懵逼询问了专业人士,朋友让我使用传统的方式,好家伙,话不多说上操作
- 用
Docker
部署的流程就放这把,可以直接跳过,只是作为一个笔记!
[root@jenkins ~]
[root@jenkins ~]
[root@jenkins ~]
[root@jenkins ~]
[root@jenkins ~]
8bf67325c495443a869b249d1f4bb853
[root@jenkins ~]
8bf67325c495443a869b249d1f4bb853
部署Docker+Jenkins+Git+Harbor流水线自动化CI/CD
CentOS Linux release 7.5.1804 (Core)
主机 |
IP地址 |
Git-server |
192.168.100.20 |
Harbor |
192.168.100.30 |
Jenkins |
192.168.100.40 |
安装部署Git
[root@git-server ~]
[root@git-server ~]
git version 1.8.3.1
[root@git-server ~]
[root@git-server ~]
[root@git-server ~]
[git@git-server ~]$ mkdir /home/git/demo.git
[git@git-server ~]$ cd /home/git/demo.git/
[git@git-server demo.git]$ git --bare init
[git@git-server demo.git]$ ls
branches config description HEAD hooks info objects refs
安装Harbor
- Docker具体安装步骤参考我的另一篇博客:Docker基础+Docker安装
[root@harbor ~]
[root@harbor ~]
[root@harbor ~]
[root@harbor ~]
Docker version 20.10.7, build f0df350
[root@git ~]
[root@harbor ~]
[root@harbor ~]
docker-compose version 1.25.5, build 8a1c60f6
docker-py version: 4.1.0
CPython version: 3.7.5
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
[root@harbor ~]
[root@harbor harbor]
hostname: 192.168.100.30
[root@harbor harbor]
[root@harbor harbor]
Now you should be able to visit the admin portal at http://192.168.100.30
[root@harbor ~]
{"insecure-registries":["192.168.100.30"]}
[root@harbor ~]
- 新建项目
- 查看推送镜像要求
[root@harbor ~]
[root@harbor ~]
[root@harbor ~]
[root@harbor ~]
- 刷新网页查看
- 镜像存在,说明上传镜像成功!
安装Jenkins
[root@jenkins ~]
[root@jenkins ~]
[root@jenkins ~]
[root@jenkins java-demo]
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = [email protected]:/home/git/demo.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[root@jenkins java-demo]
[root@jenkins java-demo]
[root@jenkins java-demo]
[root@jenkins java-demo]
[root@jenkins java-demo]
[root@jenkins ~]
[root@jenkins ~]
[root@jenkins ~]
[root@jenkins ~]
[root@jenkins test]
Cloning into 'demo'...
remote: Counting objects: 183, done.
remote: Compressing objects: 100% (165/165), done.
remote: Total 183 (delta 7), reused 173 (delta 4)
Receiving objects: 100% (183/183), 1.12 MiB | 0 bytes/s, done.
Resolving deltas: 100% (7/7), done.
- 安装
Jenkins
- 提前安装
Docker
,参照:Docker基础+Docker安装
[root@jenkins ~]
Docker version 20.10.7, build f0df350
[root@jenkins ~]
[root@jenkins ~]
[root@jenkins local]
[root@jenkins ~]
JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
[root@jenkins ~]
[root@jenkins ~]
java version "1.8.0_291"
Java(TM) SE Runtime Environment (build 1.8.0_291-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.291-b10, mixed mode)
[root@jenkins ~]
[root@jenkins ~]
[root@jenkins ~]
31cce3f846b54efa8d9f150a468cbc92
[root@jenkins ~]
31cce3f846b54efa8d9f150a468cbc92
[root@jenkins ~]
{"insecure-registries":["192.168.100.30"]
[root@jenkins ~]
http://192.168.100.40:8080
- 登录进入以后,将默认
Jenkins
下载源替换为国内源
[root@jenkins ~]
.jenkins
[root@jenkins ~]
[root@jenkins updates]
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
http://192.168.100.40:8080/restart
- 安装插件
PS
:由于实验做了无数遍,可能清除环境不是很彻底,有些默认的插件没有清理干净
- 需要下载安装
Git
和Pipeline
插件,我这里以为安装了Docker
在Jenkins
上需要安装Docker
版本的,可以忽略!
[root@jenkins ~]
- 生成凭据
- 新建项目
node {
stage('Git Checkout') {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '70ddbc0b-8fb4-4a17-8d70-5bb3a720da7d', url: '[email protected]:/home/git/demo.git']]])
}
stage('Maven Build') {
sh '''
/usr/bin/mvn clean package -Dmaven.test.skip=true
'''
}
stage('Build and Push Image') {
sh '''
REPOSITORY=192.168.100.30/pakho/tomcat-java-demo:${Branch}
echo '
FROM 192.168.100.30/pakho/tomcat:v1
MAINTAINER pakho<1064981253@qq.com>
RUN rm -rf /usr/local/tomcat/webapps
- 部署测试
2021-07-09 15:06:37.699+0000 [id=199] INFO o.j.p.workflow.job.WorkflowRun
[root@jenkins demo]
/root/test/demo
[root@jenkins demo]
whatToType: "学生管理系统v2",
[root@jenkins demo]
[root@jenkins demo]
[root@jenkins demo]
[root@jenkins demo]
[master f0150ea] v2
1 file changed, 1 insertion(+), 1 deletion(-)
[root@jenkins demo]
Counting objects: 13, done.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (7/7), 553 bytes | 0 bytes/s, done.
Total 7 (delta 3), reused 0 (delta 0)
To [email protected]:/home/git/demo.git
f0150ea..6663acd master -> master
关于实验的一些总结
- 实验做了很久,失败了无数次,环境搭了无数次,关键在于脚本的编写
- 网上有很多相似的实验,但是脚本拷贝过来修改了无数次,大都报错,对于脚本修改的地方,主要为
Dockerfile
文件
- 之前采用
cat
<<EOF
的形式,一直在部署Docker
时报错,改为echo
方式,成功执行!