第1步:springcloud项目中定义dockerfile如下:(每个参数的说明自行百度)
FROM java:8
VOLUME /tmp
ADD target/xxx-gateway.jar xxx-gateway.jar
RUN bash -c 'touch /xxx-gateway.jar'
EXPOSE 8848
ENTRYPOINT ["java","-jar","-Xms4g", "-Xmx4g","-Xmn512m", "-XX:MetaspaceSize=128m","-XX:MaxMetaspaceSize=320m", "-Xloggc:/var/log/GC/xxx-gateway-gc.log","/xxx-gateway.jar"]
第2步:在服务器(准备安装gitlab和jenkins的服务器)安装maven和jdk环境
(自行百度搜索:下配置maven和jdk环境)
第3步:搭建私服gitlab(可以自行百度,也可参考如下“-》为下一步”)
下载编译工具:yum -y groupinstall "Development Tools"
–》
依赖包:yum -y install zlib-devel perl-ExtUtils-MakeMaker asciidoc xmlto openssl-devel
--》
下载git:wget https://www.kernel.org/pub/software/scm/git/git-2.x.x.tar.gz
(git-2.13.3.tar.gz,官网地址:https://github.com/git/git/releases,不下载-rc代表候选版本)–》
解压:tar -zxvf git-2.13.3.tar.gz –》
进入目录配置:cd git-2.13.3
./configure --prefix=/usr/local/git
–》
安装:make && make install
–》
配置路径:export PATH="/usr/local/git/bin:$PATH"
source /etc/profile
完成后查看版本。(其他配置自行百度,安装gitlab并没有值得注意的地方)
第4步:安装docker(百度:centos安装docker)
安装docker值得注意的有两点:Docker 仓库进行安装时候源码地址很慢,使用阿里的:http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo;使用docker进行build时候很慢,需要修改配置daemon.json文件(后面会写到)
第5步:安装jenkins(百度:centos安装jenkins,推荐文章:https://www.cnblogs.com/stulzq/p/9291237.html)
需要注意的点:插件安装,有推荐的,有自定义的方式此步骤经常出现全部安装失败:
处理办法:先进入到jenkins,修改jenkins中插件管理站点:https改为http,或者换地址(根据这个思路百度都有)。还有就是修改default.json,修改:UpdateCenter.xml:
目前我的配置:
**站点:**http://mirror.esuni.jp/jenkins/updates/update-center.json
default.json:(太长了,传不了文件。。。私聊?其实大概的意思就是:
修改 jenkins 数据目录中的hudson.model.UpdateCenter.xml值为:
sed -i ‘s/https:\/\/updates.jenkins.io\/update-center.json/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins\/updates\/update-center.json/g‘ /root/.jenkins/hudson.model.UpdateCenter.xml
修改updates文件夹中的 default.json文件
sed -i ‘s/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g‘ /root/.jenkins/updates/default.json
sed -i ‘s/http:\/\/www.google.com/http:\/\/www.baidu.com/g‘ /root/.jenkins/updates/default.json
在浏览器中,http:localhost:8080/reload(自己的地址是啥你就输入啥只要“/reload”对了就好了),这样可以重新载入配置,或者自定义安装。(需要的插件后续使用时候会陆续说,目前只安装基本的就好了,chinese的包安装一下,中文,英语大佬忽略。)
--------至此需要的基础准备完成。
先配置备份流水线每次发布项目之前进行备份,然后使用jenkins配置maven打包springcloud服务,将打包的jar和Dockerfile分发到不同的服务器,然后ssh连接使用shell脚本进行创建镜像,启动。
第1步: jenkins插件安装
除了基础的插件,注意的几个需要安装的有(插件管理-可安插件搜索即可):
Publish Over SSH: Send build artifacts over SSH(发送文件到指定服务器)
SSH plugin: This plugin executes shell commands remotely using SSH protocol.(指定服务器执行shell脚本)
gitlab plugin:支持git(根据自身情况)
剩下git,Credentials相关的,maven,需要部署vue的安装个node.js,需要清理工作空间的Workspace Cleanup Plugin等等基础的插件这里不一一梳理了,需要什么就下载什么,哪怕暂时不知道后面会需要什么之后再返回来下载也是一样的。
第2步:在jenkins配置git和相关凭证
系统配置 ----系统配置-----Gitlab(在这里配置或者创建工程时候在创建工程里面的源码管理里面配置也可以,我就是在创建的工程里面配置的,建议在工程项目里面配置,只有一个项目那就随你喽):
解释下这个凭证: 如图(懒得打开自己的了,网上找了个图,一样的,注意是私有令牌,重新获取就会刷新,生成之前会让你选都有啥权限,根据自己的业务来,我这边是全需要,所以就都勾选了):
第3步: SSH remote hosts配置以及Publish over SSH配置
系统管理----系统配置:
这两个就是刚才安装的插件:SSH plugin和Publish Over SSH插件的配置(不安装插件这个不会有),这里就是配置一下需要安装的服务器地址,ssh连接地址:
Publish over SSH配置(ctrl+f页面上搜一下定位到):
SSH remote hosts配置:
凭证说明:
添加凭据:点击头像-凭据
这里就很好理解了,此处注意下描述如果你的机器用户名都一样,ssh连接添加凭证的时候区分不清楚,建议在描述里面加上是哪个服务的,方便区分凭证。
新建任务—构建一个maven项目
配置源码管理刚才也提到过了,
构建环境选择:Send files or execute commands over SSH after the build runs(构建完成后将指定文件发送到指定机器)
我这里是三个服务交叉部署在两台服务器上配置,而且我这里用docker和jar放到目标服务器,并不是直接打好的,打成镜像需要执行脚本(后面分享脚本):
注意下 Remote directory: 这个是放置到的位置,如果服务器没有这个文件,会自动创建
将三个jar和Dockerfile分发到服务器后最后一步:
执行已经放在放在服务器上的脚本:
脚本:
sh docker_build.sh admin_auth_tool xxx-admin xxx-auth xxx-tool
参数说明:admin_auth_tool:为服务jar和dockerfile保存的地址,其余的为服务名称
分发后服务器的目录如下:
target下为jar包,src/main/docker下为Dockerfile
注意:这个目录其实根据自己实际情况来,不一定非要这样,同样如果你改了不同路径,name下面的脚本,也仅仅只能是作为参考。
仅供参考:
#!/bin/sh
num=$# #参数总数量
one=1 #基础默认值
zero=1 #忽略第一个参数
path=$1 #第一个参数为路径
array=($@) #将命令行参数作为数组元素
while [ ${num} != ${zero} ]
do
let "num-=one"
echo "${array[num]}"
docker_num=`docker ps | grep "${array[num]}" | awk '{print $1}'`
if [ -z "${docker_num}" ]; then
cd /xzb/"${path}"/"${array[num]}"-server &&
docker build -f src/main/docker/Dockerfile -t "${array[num]}" . &&
echo "镜像已构建成功!!!!!!!!"
docker run -d -v /xxx/"${path}"/"${array[num]}"-server:/xxx/"${path}"/"${array[num]}"-server "${array[num]}" &&
echo "发布成功!!!!!!!!"
else
docker stop $(docker ps | grep "${array[num]}" | awk '{print $1}') &&
echo "容器已停止!!!!!!!!"
docker rm -f $(docker ps -a | grep "${array[num]}" | awk '{print $1}') &&
echo "旧容器已删除!!!!!!!!"
docker rmi $(docker images | grep "${array[num]}" | awk '{print $1}') &&
echo "旧镜像已删除!!!!!!!!"
cd /xzb/"${path}"/"${array[num]}"-server &&
docker build -f src/main/docker/Dockerfile -t "${array[num]}" . &&
echo "新镜像已构建成功!!!!!!!!"
docker run -d -v /xxx/"${path}"/"${array[num]}"-server:/xzb/"${path}"/"${array[num]}"-server "${array[num]}" &&
echo "重新发布成功!!!!!!!!"
fi
done
这里注意下, 会发现docker build很慢很慢,网上搜一下原因,基本都是说docker build镜像时候把文件下的所有都build进去了,这确实是个问题,还有一点就是上边说到的需要添加一个daemon.json:
报错:
docker: error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/a4/a4fdfd462add8e63749aa08ff0044b13d342a042965f1ec6744586cda10dfce9/data?verify=1591601228-BB%2FSFfmL4YVZUUoBsVmYZxIZym4%3D: dial tcp 104.18.121.25:443: i/o timeout.
解决:
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com","https://nrbewqda.mirror.aliyuncs.com","https://dmmxhzvq.mirror.aliyuncs.com"]
}
下面的地址需要使用阿里云账号去获取一下加速器(镜像加速器),一般这个是需要到服务器上登录一下(访问凭证)的:
新建任务—构建一个自由风格的软件项目:
ssh site:就是你配置的SSH remote hosts的一个个节点,连接节点并执行已经在服务器放置的脚本:
脚本:
很简单就是将jar包备份(如果需要回退到不同版本指定版本,那么从一开始选择源码配置时候就要考虑了,本文章只是适合备份上一次也就是每次发布之前做一次备份,对操作人要求严格一点,是分开任务跑的流水线,并不是构建之前自动备份,需要操作人员自觉按步骤执行)
sh xzb_backup.sh admin_auth_tool
admin_auth_tool 和刚才上边参数 一样属于path路径(脚本仅供参考,结合实际)
#!/bin/sh
path=$1 #第一个参数为路径
if [ ! -d "${path}/" ]; then
echo "路径不存在"
else
cd /xzb
echo "${path}"
tar -zcvf ${path}_backup.tar.gz ${path}/
fi
至此完成,回退的步骤这里不做讲解了,大致意思就是吧之前的备份解压重新构建镜像就可以了。
声明一下: 文章只是适合目前本文介绍的部署处理的方式,并不是通用的。
至于Docker的问题,比如log4j2日志的挂载以及日志中文乱码问题,移步我其他博客。
转载备注出处,谢谢。