啥是容器部署自动化:
1. 容器:Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套的操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并且保证部署在任何环境中的软件都能运行;
2. 部署自动化:将项目的代码托管到Gitlab/Github/SVN时,会触发webhook去通知Jenkins将代码编译打包成一个可执行文件并通过执行相应脚本去相应的服务器运行该可执行文件
效果:
## 安装一些必要的系统工具
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
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成功(注意要关闭防火墙)
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
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo yum install gitlab-ce
sudo gitlab-ctl reconfigure
搭建成功!!
注:若是在windows下提交代码到Gitlab服务器,则windows需要有git环境。若是在Gitlab服务器下提交代码,则Gitlab服务器也需要有git环境
获取jenkins密令复制上去
docker exec -it jenkins bash
cat /var/jenkins_home/secrets/initialAdminPassword
接下来初始化的操作就按默认的即可
点击系统管理往下拉,可看到 自动更新 按钮,更新完后重启jenkins
4.4.1、配置jdk
4.4.2、配置git
4.4.3、配置maven
4.4.4、配置docker
防止Gitlab的 webhook 操作403 报错问题
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.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文件中
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包和插件)
注:第一次构建会失败。原因:项目镜像构建成功,但部署脚本执行失败。
项目容器话部署成功!!
接下来是测试容器自动化部署了!!
5.2.1、修改测试接口的代码并上传到Gitlab。查看jenkins工程中是否在进行自动构建
修改后的测试接口代码:
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello jenkins-ci!!!";
}
}
再次上传代码到gitlab上便可实现容器自动化部署了
查看Jenkins
构建成功
再次访问测试接口
自动容器化部署成功!!!
若想实现jenkins与服务器不在同一台机器的情况,可将jenkins构建执行脚本换成如下设置
# 将构建的镜像上传到 个人阿里镜像仓库
.....
# 远程连接项目服务器,并执行拉取镜像和运行镜像命令
ssh root@(服务器ip)
停止容器
删除容器
删除原有镜像
拉取镜像
运行镜像
# 退出远程机器
exit
至此剧终!!
如若在部署时遇到什么问题欢迎留言一起探讨。