流程说明

jenkins+Docker+springcloud微服务持续集成_k8s
jenkins+Docker+springcloud微服务持续集成_k8s_02
jenkins+Docker+springcloud微服务持续集成_docker_03
jenkins+Docker+springcloud微服务持续集成_k8s_04
jenkins+Docker+springcloud微服务持续集成_docker_05

本地部署

jenkins+Docker+springcloud微服务持续集成_docker_06
jenkins+Docker+springcloud微服务持续集成_docker_07
微服务是可以独立部署的,如果不借助spring-boot-maven插件,package出来的jar包是不能运行的。
借助spring-boot-maven插件package出来的jar包已经内嵌了tomcat相关的jar,可以独立运行(java -jar):
jenkins+Docker+springcloud微服务持续集成_docker_08
jenkins+Docker+springcloud微服务持续集成_k8s_09

使用Dockerfile制作微服务镜像

jenkins+Docker+springcloud微服务持续集成_k8s_10
vi Dockerfile
jenkins+Docker+springcloud微服务持续集成_k8s_11

docker build --build-arg JAR_FILE=tensquare_eureka_server-1.0-SNAPSHOT.jar -t eureka:v1 .
  • –build-arg JAR_FILE=xxx 设置参数的值
  • eureka:v1:eureka是镜像名称,v1是标签tag

docker build日志查看:
jenkins+Docker+springcloud微服务持续集成_k8s_12
jenkins+Docker+springcloud微服务持续集成_docker_13
docker run创建容器验证一下:
jenkins+Docker+springcloud微服务持续集成_docker_14
jenkins+Docker+springcloud微服务持续集成_k8s_15
docker logs -f 容器ID查看容器日志

Harbor

简介

jenkins+Docker+springcloud微服务持续集成_docker_16

安装

jenkins+Docker+springcloud微服务持续集成_k8s_17
jenkins+Docker+springcloud微服务持续集成_docker_18
jenkins+Docker+springcloud微服务持续集成_k8s_19
jenkins+Docker+springcloud微服务持续集成_docker_20

创建用户和项目

jenkins+Docker+springcloud微服务持续集成_docker_21
jenkins+Docker+springcloud微服务持续集成_docker_22
jenkins+Docker+springcloud微服务持续集成_docker_23
jenkins+Docker+springcloud微服务持续集成_k8s_24
jenkins+Docker+springcloud微服务持续集成_docker_25
jenkins+Docker+springcloud微服务持续集成_docker_26
给tensquare项目添加成员:
jenkins+Docker+springcloud微服务持续集成_k8s_27
jenkins+Docker+springcloud微服务持续集成_docker_28

上传镜像到Harbor

jenkins+Docker+springcloud微服务持续集成_docker_29
jenkins+Docker+springcloud微服务持续集成_docker_30
jenkins+Docker+springcloud微服务持续集成_docker_31
由于docker并不信任harbor仓库地址,贸然上传到harbor会报错:
jenkins+Docker+springcloud微服务持续集成_k8s_32
vi /etc/docker/daemon.json 信任harbor仓库地址

jenkins+Docker+springcloud微服务持续集成_docker_33
systemctl restart docker 重启docker

上传到私有仓库,需要账号密码:不然会报错
jenkins+Docker+springcloud微服务持续集成_docker_34
所以需要登录harbor:
jenkins+Docker+springcloud微服务持续集成_k8s_35
此时就会成功push:
jenkins+Docker+springcloud微服务持续集成_k8s_36
查看harbor仓库,就会看到刚才上传的eureka镜像:
jenkins+Docker+springcloud微服务持续集成_docker_37

从harbor下载镜像

jenkins+Docker+springcloud微服务持续集成_docker_38
jenkins+Docker+springcloud微服务持续集成_k8s_39
jenkins+Docker+springcloud微服务持续集成_k8s_40
jenkins+Docker+springcloud微服务持续集成_k8s_41
docker images
jenkins+Docker+springcloud微服务持续集成_k8s_42

spring cloud微服务持续集成

代码上传到gitlab

jenkins+Docker+springcloud微服务持续集成_docker_43

idea vcs

enable
jenkins+Docker+springcloud微服务持续集成_docker_44
git
jenkins+Docker+springcloud微服务持续集成_k8s_45
add
jenkins+Docker+springcloud微服务持续集成_docker_46
commit
jenkins+Docker+springcloud微服务持续集成_docker_47
jenkins+Docker+springcloud微服务持续集成_k8s_48
jenkins+Docker+springcloud微服务持续集成_docker_49
remotes
jenkins+Docker+springcloud微服务持续集成_k8s_50
jenkins+Docker+springcloud微服务持续集成_docker_51
jenkins+Docker+springcloud微服务持续集成_k8s_52
push
jenkins+Docker+springcloud微服务持续集成_docker_53
jenkins+Docker+springcloud微服务持续集成_k8s_54

TortoiseGit操作方式

init
jenkins+Docker+springcloud微服务持续集成_docker_55
jenkins+Docker+springcloud微服务持续集成_k8s_56
commit
jenkins+Docker+springcloud微服务持续集成_k8s_57
jenkins+Docker+springcloud微服务持续集成_k8s_58
push
jenkins+Docker+springcloud微服务持续集成_docker_59
remote
jenkins+Docker+springcloud微服务持续集成_docker_60
jenkins+Docker+springcloud微服务持续集成_k8s_61
jenkins+Docker+springcloud微服务持续集成_k8s_62
jenkins+Docker+springcloud微服务持续集成_k8s_63
jenkins+Docker+springcloud微服务持续集成_k8s_64

从gitlab拉取项目源码

在项目根目录创建Jenkinsfile脚本文件:
jenkins+Docker+springcloud微服务持续集成_docker_65
jenkins操作:创建pipeline
jenkins+Docker+springcloud微服务持续集成_k8s_66
jenkins+Docker+springcloud微服务持续集成_k8s_67
jenkins+Docker+springcloud微服务持续集成_docker_68
jenkins+Docker+springcloud微服务持续集成_docker_69
将分支设计成参数接收,更灵活:
jenkins+Docker+springcloud微服务持续集成_docker_70
jenkins+Docker+springcloud微服务持续集成_k8s_71
脚本中的变量设计:
jenkins+Docker+springcloud微服务持续集成_k8s_72
" "双引号引用变量:
jenkins+Docker+springcloud微服务持续集成_k8s_73
提交Jenkinsfile脚本文件:
jenkins+Docker+springcloud微服务持续集成_docker_74
Build With Parameters
jenkins+Docker+springcloud微服务持续集成_docker_75
构建完毕后代码成功pull:
jenkins+Docker+springcloud微服务持续集成_docker_76

提交到SonarQube代码审查

jenkins+Docker+springcloud微服务持续集成_k8s_77
jenkins+Docker+springcloud微服务持续集成_docker_78
jenkins+Docker+springcloud微服务持续集成_docker_79
jenkins+Docker+springcloud微服务持续集成_k8s_80

jenkins+Docker+springcloud微服务持续集成_docker_81
jenkins+Docker+springcloud微服务持续集成_k8s_82
jenkins+Docker+springcloud微服务持续集成_docker_83
jenkins+Docker+springcloud微服务持续集成_docker_84
jenkins+Docker+springcloud微服务持续集成_k8s_85

jenkins+Docker+springcloud微服务持续集成_docker_86
jenkins+Docker+springcloud微服务持续集成_k8s_87
jenkins+Docker+springcloud微服务持续集成_docker_88
报错:
jenkins+Docker+springcloud微服务持续集成_k8s_89
注释这行:
jenkins+Docker+springcloud微服务持续集成_docker_90
jenkins+Docker+springcloud微服务持续集成_docker_91
jenkins+Docker+springcloud微服务持续集成_k8s_92

package各个子项目进行

jenkins+Docker+springcloud微服务持续集成_k8s_93
mvn install失败
因为common工程不是一个标准的spring cloud微服务工程,找不到启动类main class而报错。
因此不能在parent工程中引入spring-boot-maven插件,而是在需要该插件的子工程中分别引入。
jenkins+Docker+springcloud微服务持续集成_k8s_94
再次构建,就已经安装到本地仓库了:
jenkins+Docker+springcloud微服务持续集成_docker_95
mvn clean package
jenkins+Docker+springcloud微服务持续集成_docker_96

使用${project_name}来获取当前工程的名称

jenkins+Docker+springcloud微服务持续集成_docker_97
jenkins+Docker+springcloud微服务持续集成_docker_98
package zuul时报错:
找不到parent父工程
jenkins+Docker+springcloud微服务持续集成_k8s_99
需手动上传parent的pom文件到服务器的仓库相应目录下:
jenkins+Docker+springcloud微服务持续集成_k8s_100
jenkins+Docker+springcloud微服务持续集成_docker_101
jenkins+Docker+springcloud微服务持续集成_docker_102

使用Dockerfile编译、生成镜像

jenkins+Docker+springcloud微服务持续集成_k8s_103

dockerfile-maven-plugin插件可以读取每个工程中的Dockerfile文件自动构建镜像

jenkins+Docker+springcloud微服务持续集成_k8s_104
tensquare_eureka_server工程
jenkins+Docker+springcloud微服务持续集成_k8s_105
使用dockerfile-maven-plugin插件调用Dockerfile脚本文件生成镜像:
jenkins+Docker+springcloud微服务持续集成_docker_106
Jenkinsfile脚本中触发dockerfile-maven-plugin插件的执行:
jenkins+Docker+springcloud微服务持续集成_docker_107
jenkins+Docker+springcloud微服务持续集成_k8s_108
构建完毕后会生成eureka工程的镜像:
jenkins+Docker+springcloud微服务持续集成_docker_109
每个子工程都需要添加Dockerfile脚本文件和在pom.xml中添加dockerfile-maven-plugin插件:
jenkins+Docker+springcloud微服务持续集成_k8s_110
jenkins+Docker+springcloud微服务持续集成_docker_111
jenkins+Docker+springcloud微服务持续集成_k8s_112

上传镜像到harbor镜像仓库

jenkins+Docker+springcloud微服务持续集成_docker_113
定义镜像的标签(版本号):
jenkins+Docker+springcloud微服务持续集成_docker_114
定义harbor的URL地址:
jenkins+Docker+springcloud微服务持续集成_docker_115
定义harbor的项目名称:
jenkins+Docker+springcloud微服务持续集成_docker_116
jenkins+Docker+springcloud微服务持续集成_k8s_117
jenkins+Docker+springcloud微服务持续集成_k8s_118
上传到harbor是需要login的,账号密码写在Jenkinsfile脚本中就会暴露给所有开发人员,所以应该在jenkins的凭据中添加harbor的账号密码:
jenkins+Docker+springcloud微服务持续集成_docker_119
jenkins+Docker+springcloud微服务持续集成_docker_120
jenkins+Docker+springcloud微服务持续集成_docker_121
点击账号进入会看到自动生成的ID:
jenkins+Docker+springcloud微服务持续集成_k8s_122
Jenkinsfile脚本中定义harbor的登录凭证ID:
jenkins+Docker+springcloud微服务持续集成_k8s_123
在流水线语法中选择:
jenkins+Docker+springcloud微服务持续集成_k8s_124
jenkins+Docker+springcloud微服务持续集成_k8s_125
jenkins+Docker+springcloud微服务持续集成_k8s_126
对生成的脚本代码进行变量替换(可选):
jenkins+Docker+springcloud微服务持续集成_docker_127
jenkins+Docker+springcloud微服务持续集成_docker_128
提交push脚本。
jenkins构建日志:

jenkins+Docker+springcloud微服务持续集成_docker_129
登录harbor仓库查看push的镜像:
jenkins+Docker+springcloud微服务持续集成_docker_130

从harbor拉取镜像和发布应用

jenkins+Docker+springcloud微服务持续集成_k8s_131
jenkins+Docker+springcloud微服务持续集成_k8s_132

jenkins安装Publish Over SSH插件

jenkins+Docker+springcloud微服务持续集成_docker_133
配置101ssh免密登录到103

jenkins+Docker+springcloud微服务持续集成_k8s_134
jenkins+Docker+springcloud微服务持续集成_k8s_135
jenkins+Docker+springcloud微服务持续集成_docker_136
jenkins+Docker+springcloud微服务持续集成_k8s_137
生成远程执行命令脚本:
jenkins+Docker+springcloud微服务持续集成_k8s_138
jenkins+Docker+springcloud微服务持续集成_k8s_139
jenkins+Docker+springcloud微服务持续集成_k8s_140
jenkins+Docker+springcloud微服务持续集成_docker_141