Jenkins+Gitlab+Docker实现微服务容器部署自动化

Jenkins+Gitlab+Docker实现微服务容器部署自动化

Jenkins+Gitlab+Docker实现微服务容器部署自动化_第1张图片

啥是容器部署自动化:

1. 容器:Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套的操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并且保证部署在任何环境中的软件都能运行;

2. 部署自动化:将项目的代码托管到Gitlab/Github/SVN时,会触发webhook去通知Jenkins将代码编译打包成一个可执行文件并通过执行相应脚本去相应的服务器运行该可执行文件

效果:

Jenkins+Gitlab+Docker实现微服务容器部署自动化_第2张图片

第一步、安装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

Jenkins+Gitlab+Docker实现微服务容器部署自动化_第3张图片

搭建成功!!

注:若是在windows下提交代码到Gitlab服务器,则windows需要有git环境。若是在Gitlab服务器下提交代码,则Gitlab服务器也需要有git环境

 

第四步、配置Jenkins环境

4.1、访问Jenkins首页,到如下页面

Jenkins+Gitlab+Docker实现微服务容器部署自动化_第4张图片

获取jenkins密令复制上去

docker exec -it jenkins bash
cat /var/jenkins_home/secrets/initialAdminPassword

接下来初始化的操作就按默认的即可

4.2、更新jenkins

点击系统管理往下拉,可看到 自动更新 按钮,更新完后重启jenkins

4.3、安装相关插件

Jenkins+Gitlab+Docker实现微服务容器部署自动化_第5张图片

4.4、配置全局工具设置

4.4.1、配置jdk

Jenkins+Gitlab+Docker实现微服务容器部署自动化_第6张图片

4.4.2、配置git

Jenkins+Gitlab+Docker实现微服务容器部署自动化_第7张图片

4.4.3、配置maven

Jenkins+Gitlab+Docker实现微服务容器部署自动化_第8张图片

4.4.4、配置docker

Jenkins+Gitlab+Docker实现微服务容器部署自动化_第9张图片

 

4.5、取消在全局安全配置的 “防止跨站请求伪造漏洞” 选项、勾选“任何人可做任何事”选项

防止Gitlab的 webhook 操作403 报错问题

 

Jenkins+Gitlab+Docker实现微服务容器部署自动化_第10张图片

 

4.6、创建Gitlab 项目仓库和Jenkins工程,并设置好 Gitlab 的 webhook(钩子,当提交代码到Gitlab时,Gitlab将会触发webhook,以通知Jenkins自动构建部署)

4.6.1、Gitlab仓库

Jenkins+Gitlab+Docker实现微服务容器部署自动化_第11张图片

4.6.2、jenkins工程配置

配置代码源

Jenkins+Gitlab+Docker实现微服务容器部署自动化_第12张图片

配置触发条件

Jenkins+Gitlab+Docker实现微服务容器部署自动化_第13张图片

配置打包部署命令和脚本;  注:要选中你在全局工具配置中安装的那个maven

Jenkins+Gitlab+Docker实现微服务容器部署自动化_第14张图片

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

先开启“可外发钩子请求”

Jenkins+Gitlab+Docker实现微服务容器部署自动化_第15张图片

添加webhook

Jenkins+Gitlab+Docker实现微服务容器部署自动化_第16张图片

 

至此,所有相关配置以及配置完毕,接下来就是自动部署测试了!!

 

第五步、初始化自动配置

5.1、新建项目并提交到Gitlab

5.1.1、新建springboot项目 jenkins-ci;在src/main/ 目录下新建docker目录并创建Dockerfile文件

注意:项目不要用8080端口,gitlab有默认用8080端口会引起冲突

Jenkins+Gitlab+Docker实现微服务容器部署自动化_第17张图片

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文件中

    
        0.4.3
        jenkins
        ci
    


    com.spotify
    docker-maven-plugin
    ${docker.maven.version}

    
        
        ${docker.image.prefix}/${docker.image.suffix}
        
            ${project.version}
            latest
        
        src/main/docker
        
            
                /
                ${project.build.directory}
                ${project.build.finalName}.jar
            
        
    

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包和插件)

Jenkins+Gitlab+Docker实现微服务容器部署自动化_第18张图片

注:第一次构建会失败。原因:项目镜像构建成功,但部署脚本执行失败。

Jenkins+Gitlab+Docker实现微服务容器部署自动化_第19张图片

5.1.6、去服务器查看该镜像并手动启动,访问测试Jenkins+Gitlab+Docker实现微服务容器部署自动化_第20张图片

 

 

Jenkins+Gitlab+Docker实现微服务容器部署自动化_第21张图片

项目容器话部署成功!!

接下来是测试容器自动化部署了!!

5.2、容器自动化部署

5.2.1、修改测试接口的代码并上传到Gitlab。查看jenkins工程中是否在进行自动构建

修改后的测试接口代码:

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "hello jenkins-ci!!!";
    }

}

再次上传代码到gitlab上便可实现容器自动化部署了

查看Jenkins

构建成功

Jenkins+Gitlab+Docker实现微服务容器部署自动化_第22张图片

Jenkins+Gitlab+Docker实现微服务容器部署自动化_第23张图片

再次访问测试接口

Jenkins+Gitlab+Docker实现微服务容器部署自动化_第24张图片

自动容器化部署成功!!!

 

若想实现jenkins与服务器不在同一台机器的情况,可将jenkins构建执行脚本换成如下设置

# 将构建的镜像上传到 个人阿里镜像仓库
.....
# 远程连接项目服务器,并执行拉取镜像和运行镜像命令
ssh root@(服务器ip)
停止容器
删除容器
删除原有镜像
拉取镜像
运行镜像
# 退出远程机器
exit

 

至此剧终!!

如若在部署时遇到什么问题欢迎留言一起探讨。

 

你可能感兴趣的:(Jenkins+Gitlab+Docker实现微服务容器部署自动化)