Jenkins+Gitlab+Docker实现微服务容器部署自动化
Jenkins+Gitlab+Docker实现微服务容器部署自动化
啥是容器部署自动化:
1. 容器:Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套的操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并且保证部署在任何环境中的软件都能运行;
2. 部署自动化:将项目的代码托管到Gitlab/Github/SVN时,会触发webhook去通知Jenkins将代码编译打包成一个可执行文件并通过执行相应脚本去相应的服务器运行该可执行文件
效果:
第一步、安装docker
-
## 安装一些必要的系统工具
-
yum install -y yum-utils device-mapper-persistent-data lvm2
-
-
## 添加软件源信息
-
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
-
## 更新yum缓存
-
yum makecache fast
-
-
## 安装 Docker-ce
-
yum -y install docker-ce
-
-
## 启动 Docker 后台服务
-
systemctl start docker
-
-
## 测试运行 hello-world
-
docker run hello-world
-
-
## 配置docker镜像加速器
-
## 修改daemon配置文件/etc/docker/daemon.json来使用加速器
-
sudo mkdir -p /etc/docker
-
sudo tee /etc/docker/daemon.json <<-'EOF'
-
{
-
"registry-mirrors": ["https://kb64la55.mirror.aliyuncs.com"]
-
}
-
EOF
-
sudo systemctl daemon-reload
-
sudo systemctl restart docker
第二步、使用docker 搭建jenkins
2.1、新建jenkins的 Dockerfile并构建成镜像运行
-
vi Dockerfile
-
-
## 添加如下内容
-
FROM jenkins
-
USER root
-
RUN apt-get update && apt-get install -y sudo && rm -rf /var/lib/apt/lists/*
-
RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers
-
USER jenkins
-
-
## 执行构建镜像命令
-
docker build -t jenkins .
-
-
## 查看构建的jenkins镜像
-
docker images
-
-
## 运行jenkins镜像
-
docker run --memory 2.0G --name jenkins -p 18181:8080 -p 50000:50000 -u root -d --env JAVA_OPTS="-Xms256m -Xmx512m -XX:MaxNewSize=256m" -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -v /home/zhexing/software/jenkins:/var/jenkins_home -v /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 myjenkins
访问 http://jenkins服务器ip:18181 确认是否搭建jenkins成功(注意要关闭防火墙)
第三步、搭建Gitlab
3.1、安装配置依赖项
-
sudo yum install curl openssh-server openssh-clients postfix cronie
-
sudo service postfix start
-
sudo chkconfig postfix on
-
sudo yum -y lokkit
-
sudo lokkit -s http -s ssh
3.2、添加Gitlab仓库,并安装到服务器上
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash sudo yum install gitlab-ce
3.3、启动Gitlab
sudo gitlab-ctl reconfigure
搭建成功!!
注:若是在windows下提交代码到Gitlab服务器,则windows需要有git环境。若是在Gitlab服务器下提交代码,则Gitlab服务器也需要有git环境
第四步、配置Jenkins环境
4.1、访问Jenkins首页,到如下页面
获取jenkins密令复制上去
-
docker exec -it jenkins bash
-
cat /var/jenkins_home/secrets/initialAdminPassword
接下来初始化的操作就按默认的即可
4.2、更新jenkins
点击系统管理往下拉,可看到 自动更新 按钮,更新完后重启jenkins
4.3、安装相关插件
4.4、配置全局工具设置
4.4.1、配置jdk
4.4.2、配置git
4.4.3、配置maven
4.4.4、配置docker
4.5、取消在全局安全配置的 “防止跨站请求伪造漏洞” 选项、勾选“任何人可做任何事”选项
防止Gitlab的 webhook 操作403 报错问题
4.6、创建Gitlab 项目仓库和Jenkins工程,并设置好 Gitlab 的 webhook(钩子,当提交代码到Gitlab时,Gitlab将会触发webhook,以通知Jenkins自动构建部署)
4.6.1、Gitlab仓库
4.6.2、jenkins工程配置
配置代码源
配置触发条件
配置打包部署命令和脚本; 注:要选中你在全局工具配置中安装的那个maven
clean package docker:build
-
docker stop jenkins-ci
-
docker rm jenkins-ci
-
docker run -d -p 8888:8888 --name jenkins-ci jenkins/ci
去Gitlab仓库设置webhook
先开启“可外发钩子请求”
添加webhook
至此,所有相关配置以及配置完毕,接下来就是自动部署测试了!!
第五步、初始化自动配置
5.1、新建项目并提交到Gitlab
5.1.1、新建springboot项目 jenkins-ci;在src/main/ 目录下新建docker目录并创建Dockerfile文件
注意:项目不要用8080端口,gitlab有默认用8080端口会引起冲突
Dockerfile:
-
FROM openjdk:8-jre
-
-
ENV SPRING_OUTPUT_ANSI_ENABLED=ALWAYS \
-
JAVA_OPTS=""
-
-
ADD *.jar app.jar
-
-
CMD echo "The application will start " && \
-
java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /app.jar
-
-
EXPOSE 8888
5.1.2、添加docker编译插件到pom文件中
-
<properties>
-
<docker.maven.version>0.4.3</docker.maven.version>
-
<docker.image.prefix>jenkins</docker.image.prefix>
-
<docker.image.suffix>ci</docker.image.suffix>
-
</properties>
-
-
<plugin>
-
<groupId>com.spotify</groupId>
-
<artifactId>docker-maven-plugin</artifactId>
-
<version>${docker.maven.version}</version>
-
-
<configuration>
-
<!--<imageName>${docker.image.prefix}/${project.artifactId}</imageName>-->
-
<imageName>${docker.image.prefix}/${docker.image.suffix}</imageName>
-
<imageTags>
-
<imageTag>${project.version}</imageTag>
-
<imageTag>latest</imageTag>
-
</imageTags>
-
<dockerDirectory>src/main/docker</dockerDirectory>
-
<resources>
-
<resource>
-
<targetPath>/</targetPath>
-
<directory>${project.build.directory}</directory>
-
<include>${project.build.finalName}.jar</include>
-
</resource>
-
</resources>
-
</configuration>
-
</plugin>
5.1.3、创建一个测试接口 修改项目端口
-
@RestController
-
public class HelloController {
-
-
@GetMapping("/hello")
-
public String hello() {
-
return "hello world";
-
}
-
}
server.port=8888
5.1.4、初始化git仓库并上传代码
-
$ git init
-
$ git remote add origin http://192.168.2.168/root/jenkins-ci.git
-
$ git remote -v
-
$ git add .
-
$ git commit -m "commit version 0.0.1"
-
$ git push -u origin master
5.1.5、去jenkins的工程中点击 Build Now 构建项目(第一次可能会很慢,要下载很多的jar包和插件)
注:第一次构建会失败。原因:项目镜像构建成功,但部署脚本执行失败。
5.1.6、去服务器查看该镜像并手动启动,访问测试
项目容器话部署成功!!
接下来是测试容器自动化部署了!!
5.2、容器自动化部署
5.2.1、修改测试接口的代码并上传到Gitlab。查看jenkins工程中是否在进行自动构建
修改后的测试接口代码:
-
@RestController
-
public class HelloController {
-
-
@GetMapping("/hello")
-
public String hello() {
-
return "hello jenkins-ci!!!";
-
}
-
-
}
再次上传代码到gitlab上便可实现容器自动化部署了
查看Jenkins
构建成功
再次访问测试接口
自动容器化部署成功!!!
若想实现jenkins与服务器不在同一台机器的情况,可将jenkins构建执行脚本换成如下设置
-
# 将构建的镜像上传到 个人阿里镜像仓库
-
.....
-
# 远程连接项目服务器,并执行拉取镜像和运行镜像命令
-
ssh aaa@qq.com(服务器ip)
-
停止容器
-
删除容器
-
删除原有镜像
-
拉取镜像
-
运行镜像
-
# 退出远程机器
-
exit
至此剧终!!
如若在部署时遇到什么问题欢迎留言一起探讨。
<li class="tool-item tool-active is-like tool-clicked"><a href="javascript:;"><svg class="icon" aria-hidden="true">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#csdnc-thumbsup"></use>
</svg><span class="name">点赞</span>
<span class="count">1</span>
</a></li>
<li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{"mod":"popu_824"}"><svg class="icon" aria-hidden="true">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-csdnc-Collection-G"></use>
</svg><span class="name">收藏</span></a></li>
<li class="tool-item tool-active is-share"><a href="javascript:;"><svg class="icon" aria-hidden="true">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-csdnc-fenxiang"></use>
</svg>分享</a></li>
<!--打赏开始-->
<!--打赏结束-->
<li class="tool-item tool-more">
<a>
<svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg>
</a>
<ul class="more-box">
<li class="item"><a class="article-report">文章举报</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div class="person-messagebox">
<div class="left-message"><a href="https://blog.csdn.net/weixin_40493969">
<img src="https://profile.csdnimg.cn/5/0/8/3_weixin_40493969" class="avatar_pic" username="weixin_40493969">
<img src="https://g.csdnimg.cn/static/user-reg-year/2x/2.png" class="user-years">
</a></div>
<div class="middle-message">
<div class="title"><span class="tit"><a href="https://blog.csdn.net/weixin_40493969" data-report-click="{"mod":"popu_379"}" target="_blank">疾风盲豪-亚青</a></span>
</div>
<div class="text"><span>发布了31 篇原创文章</span> · <span>获赞 13</span> · <span>访问量 2万+</span></div>
</div>
<div class="right-message">
<a href="https://im.csdn.net/im/main.html?userName=weixin_40493969" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-letter">私信
</a>
<a class="btn btn-sm bt-button personal-watch" data-report-click="{"mod":"popu_379"}">关注</a>
</div>
</div>
</div>
下一篇: JS实现输入框智能提示
推荐阅读
-
.Net Core in Docker - 使用阿里云Codepipeline及阿里云容器镜像服务实现持续交付/部署(CD)
-
使用腾讯云容器服务(TKE)是如何实现应用跨可用区高可用部署的? TKE高可用
-
windows服务器实现自动化部署,启动以及暂停
-
容器镜像服务联手 IDE 插件,实现一键部署、持续集成与交付 c
-
容器镜像服务 联手 IDE 插件,实现一键部署、持续集成与交付 ide工作
-
Jenkins+Gitlab+Docker实现微服务容器部署自动化
-
docker+jenkins+阿里云容器服务自动化部署
-
如何将Spring Cloud项目(微服务)自动化部署到Docker容器上(图文详解)
-
.Net Core in Docker - 使用阿里云Codepipeline及阿里云容器镜像服务实现持续交付/部署(CD)
-
windows服务器实现自动化部署,启动以及暂停