文章目录
目录
文章目录
前言
一、第一台服务器--Jenkins
1、安装前
2、安装Jenkins
3、修改正在跑容器的端口
4、Jenkins内部插件和配置
二、第二台服务器--Harbor
1、安装docker-compose
2.安装及配置
3、卸载Harbor
4、Harbor启动后操作
三、第三台服务器--生产环境
1、配置私服地址
四、Jenkins配置
1、新建流水线
1.5 流水线脚本
1.5.1、流水线脚本结构作用解析:
2、拉取git代码
2.5、dockerfile的编写
3、maven打包
4、推送镜像给Harbor
5、 生产环境运行
五、流水线总结与填坑
前言
该文为记录自己在生产环境中,使用Gitlab+Docker+Jenkins+Harbor等技术实现自动化部署的流程与踩过的坑,供大家学习和自己积累。
整体流程:
一、第一台服务器--Jenkins
1、安装前
将JDK、Maven、docker以及maven的国内镜像,安装更换好
2、安装Jenkins
首先,搭建第一台服务器,用于安装部署Jenkins,
docker run --name jenkins --restart=always -u root -p 8080:8080 -p 50000:50000 -v /var/jenkins_home/:/var/jenkins_home/ -v /usr/local/jdk:/usr/local/jdk -v /usr/local/maven:/usr/local/maven -d jenkins/jenkins:lts
docker语句就不过多解释了,不知道开局解锁Jenkins密码的可以通过docker logs 查看密码。这里提醒:标红的8080为映射出来的端口号,改为你自己的端口,如果以后要改这边也提供了方法
3、修改正在跑容器的端口
对于正在跑容器的端口,又不想重新创建,不想重新配置,可以通过打包镜像的方式,重新run给他自己新的端口
# 先停止容器
docker stop 容器A
# 将容器commit成为一个镜像
docker commit 容器A 新镜像B
# 运行容器
docker run -p 8080:8080 新镜像B
#或者执行上面的命令,把镜像命改下就行~
如果存在gitlab是其他网络的情况,明明能ping得通gitlab,但是就是拉取不了代码
#我们需要去docker容器里面去开通白名单,进入Jenkins容器内部
docker exec -it 容器 /bin/bash
#修改hosts文件,添加你对应的Ip
vim /etc/hosts
#往下面加一行对应的ip和域名即可
4、Jenkins内部插件和配置
全局工具配置 —— 配置jdk和maven,这边建议本地安装,通过docker run jenkins的命令将对应配置文件挂载进Jenkins容器内。
系统配置 —— 在最底下Publish over SSH(若没有去插件处下载对应插件)中配置需要远程连接的服务器,包括harbor服务器、生产环境服务器
插件管理 —— 这主要是看你需要什么插件就下载什么插件,比如刚刚的Publish over SSH,若未汉化下载Localization: Chinese (Simplified)插件。重启后才可生效!
二、第二台服务器--Harbor
harbor官网
1、安装docker-compose
#安装(包括命令下载位置,改的话下面赋权也要改)
curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#赋权
chmod +x /usr/local/bin/docker-compose
#查看是否安装成功
docker-compose --version
2.安装及配置
#下载
wget --no-check-certificate https://github.com/goharbor/harbor/releases/dow nload/v1.10.14/harbor-offline-installer-v1.10.14.tgz
#解压
tar xzvf harbor-offline-installer-v1.10.14.tgz
修改配置文件:包括host、网络的限制、端口和登录密码的修改
#安装,使⽤docker-compose可以快速安装
./install
3、卸载Harbor
#卸载(去对应文件夹)
docker-compose down
4、Harbor启动后操作
修改docker配置文件:/etc/docker/daemon.json
cat > /etc/docker/daemon.json <<-'EOF'
{
"insecure-registries": ["192.168.129.133:80"]
}
EOF
systemctl daemon-reload
systemctl restart docker
harbor使用不过多赘述
三、第三台服务器--生产环境
安装docker。由于是push镜像到该服务器镜像运行,所以必须要有docker环境
1、配置私服地址
与harbor一样,修改docker配置文件:/etc/docker/daemon.json
cat > /etc/docker/daemon.json <<-'EOF'
{
"insecure-registries": ["192.168.129.133:80"]
}
EOF
systemctl daemon-reload
systemctl restart docker
四、Jenkins配置
整体流程过于繁琐,贴图过多,这里讲下整体思路:
新建流水线 —— 拉取git代码 —— maven打包 —— 推送镜像给Harbor —— 生产环境运行
1、新建流水线
丢弃旧的构建:这边建议勾选,之前我们就出现过镜像容器过多,无法启动的情况。
参数化构建过程:(功能主要是版本控制,对应在gitlab - 项目 - 仓库标签 处添加标签)目的是方便版本回退,进行标签化管理项目。而不用像以前需要改包名,重新发版
git标签管理(此处是gtiee,gitlab同理)
Jenkins标签化设置页面:名称可以动态配置,下面配置处保持一致,默认值是从哪个分支取标签
1.5 流水线脚本
由于我们是流水线工程,接下来大部分操作和指令都用到的是流水线脚本,这个模块简单介绍下流水线脚本的使用和基本框架。
在Jenkins最下面有流水线脚本编写的地方,定义的当前选项是在Jenkins里面写流水线,另一个from SCM选项是指使用远程仓库处的Jenkinsfile,这个我们后文再讲。
脚本处右边还有个选项,这个就是Jenkins提供的模板,我们可以选择hello-world初始化模板,将会生成一些基础的框架,里面内容我们接下来一点点完成。
1.5.1、流水线脚本结构作用解析:
最外层的pipeline,意思是说明这段代码用作流水线;
agent any,下面的脚本作用于全阶段
stages,里面内容的每一个阶段都总文件夹
stage,就是对应的每个阶段(包括:拉取代码、打包、推送harbor、生产环境运行)
steps,对应脚本部分,里面的内容都是可以自动生成的,在下面流水线语法中。
2、拉取git代码
继1.5的内容,我们第一步就是从gitlab上去拉取代码。我们点开“流水线语法”生成我们的第一段脚本。
打开后,步骤选下图中的“checkout”,下面就是和free-style一样编写,接着生成流水线即可获得拉取git代码的脚本,将其贴在steps里即可(生成流水线脚本放入对应步骤中)。
$tag 就是刚刚配置的标签
ps: 这里可以构建下,试试看有没有啥问题。
2.5、dockerfile的编写
dockerfile可以将其理解为构建镜像的文件,就是将刚刚拉取的代码构建成一个镜像,详细的步骤讲解就不放了,大概流程就是:
定制所需的镜像 —— 指定工作目录 —— 将jar文件/war包/dist文件夹复制到容器内 —— 运行jar包
FROM java:8
WORKDIR /usr/local
COPY spring-boot-project-front-end-back-end-0.0.1-SNAPSHOT.jar .
CMD java -jar spring-boot-project-front-end-back-end-0.0.1-SNAPSHOT.jar
3、maven打包
拉取完代码就要将其maven打包,在此之前要在全局工具配置处配置maven路径
sh 'sh /usr/local/maven/bin/mvn package'
①生成流水线脚本放入对应步骤中
4、推送镜像给Harbor
该步骤主要就是将运行文件放到harbor内,让harbor去打包成镜像存储
提前在系统配置处配置harbor的SSH路径。
流水线语法在对应的sshPublisher: Send build artifacts over SSH中编写:
①选择对应的SSH Server的名字(在系统配置处配置的名字)
②接下来就是将jar文件传至harbor中
③执行对应的脚本:docker build构建镜像镜像名应为:IP:端口/harbor文件夹/项目名:版本号 后面是指的将该镜像构建至何处,根据个人需求放至对应位置即可
docker login 是登录harbor服务器的命令,后面跟harbor的ip:端口
docker push 推送镜像至harbor服务器中
④生成流水线脚本放入对应步骤中
执行完即可去harbor服务器查看对应位置是否有刚刚推送的镜像了,若执行过程中出错,Jenkins的报错信息是看不出什么内容的,将那三条指令一条一条的去harbor服务器中运行,看哪一步出错。
5、 生产环境运行
接下来就很简单了,只需要在生产环境将原容器rm了,再去docker run就行了。
同样,提前在系统配置处配置生产环境的SSH路径
流水线语法在对应的sshPublisher: Send build artifacts over SSH中编写(与上同):
①选择对应的SSH Server的名字(与上同)
②在Exec command 写脚本的地方把rm命令和run命令执行即可。
docker rm -f myproject
docker run -p 8080:8080 -d --name myproject 192.168.129.133:80/public/myproject:$tag
③生成流水线脚本放入对应步骤中
五、流水线总结与填坑
最后我们在pipeline script中会得到最终的流水线脚本,但是存在一个问题:若容器迁移因为各种原因丢失了容器,镜像内是不存在我们之前的配置的,接下来有两种方法:1、将现在配置好的Jenkins重新打成一个镜像,再docker save成一个tar包,本地存储;2、将流水线脚本放置于git中去托管,这就是之前提到的pipeline script from SCM
选择第二个选项,我们就可以得到一个类似git拉取的页面,他就是拉取我们的Jenkinsfile文件的,将流水线脚本全部内容存在项目根目录下的Jenkinsfile文件中(新建file),在这里就会自动拉取你根目录的Jenkinsfile文件,读取你的Jenkins流水线脚本,效果与之前的效果是一样的。文章来源:https://www.toymoban.com/news/detail-631340.html
文章来源地址https://www.toymoban.com/news/detail-631340.html
到了这里,关于Gitlab + Docker + Jenkins + Harbor实现自动化部署的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!