微服务是可以独立部署的,如果不借助spring-boot-maven插件,package出来的jar包是不能运行的。
借助spring-boot-maven插件package出来的jar包已经内嵌了tomcat相关的jar,可以独立运行(java -jar):
vi Dockerfile
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
日志查看:docker run
创建容器验证一下:docker logs -f 容器ID
查看容器日志
简介
安装
创建用户和项目
给tensquare项目添加成员:
上传镜像到Harbor
由于docker并不信任harbor仓库地址,贸然上传到harbor会报错:vi /etc/docker/daemon.json
信任harbor仓库地址
systemctl restart docker
重启docker
上传到私有仓库,需要账号密码:不然会报错
所以需要登录harbor:
此时就会成功push:
查看harbor仓库,就会看到刚才上传的eureka镜像:
从harbor下载镜像
docker images
代码上传到gitlab
idea vcs
enable
git
add
commit
remotes
push
TortoiseGit操作方式
init
commit
push
remote
从gitlab拉取项目源码
在项目根目录创建Jenkinsfile
脚本文件:
jenkins操作:创建pipeline
将分支设计成参数接收,更灵活:
脚本中的变量设计:" "
双引号引用变量:
提交Jenkinsfile
脚本文件:Build With Parameters
构建完毕后代码成功pull:
提交到SonarQube代码审查
报错:
注释这行:
package各个子项目进行
mvn install
失败
因为common工程不是一个标准的spring cloud微服务工程,找不到启动类main class而报错。
因此不能在parent工程中引入spring-boot-maven插件,而是在需要该插件的子工程中分别引入。
再次构建,就已经安装到本地仓库了:mvn clean package
使用
${project_name}
来获取当前工程的名称
package zuul时报错:
找不到parent父工程
需手动上传parent的pom文件到服务器的仓库相应目录下:
使用Dockerfile编译、生成镜像
dockerfile-maven-plugin
插件可以读取每个工程中的Dockerfile文件自动构建镜像
tensquare_eureka_server
工程
使用dockerfile-maven-plugin
插件调用Dockerfile
脚本文件生成镜像:
在Jenkinsfile
脚本中触发dockerfile-maven-plugin插件的执行:
构建完毕后会生成eureka工程的镜像:
每个子工程都需要添加Dockerfile
脚本文件和在pom.xml
中添加dockerfile-maven-plugin
插件:
上传镜像到harbor镜像仓库
定义镜像的标签(版本号):
定义harbor的URL地址:
定义harbor的项目名称:
上传到harbor是需要login的,账号密码写在Jenkinsfile脚本中就会暴露给所有开发人员,所以应该在jenkins的凭据中添加harbor的账号密码:
点击账号进入会看到自动生成的ID:
在Jenkinsfile
脚本中定义harbor的登录凭证ID:
在流水线语法中选择:
对生成的脚本代码进行变量替换(可选):
提交push脚本。
jenkins构建日志:
登录harbor仓库查看push的镜像:
从harbor拉取镜像和发布应用
jenkins安装Publish Over SSH插件
配置101
ssh免密登录到103
生成远程执行命令脚本: