当使用微服务方案后,面临在大量的项目构建和部署工作,借助于jenkins的持续集成,可以快速把应用打包成docker镜像,实现自动部署,加快项目的迭代。
一、环境部署
系统 | IP | 主机名 | 角色 | CentOS 7.4 | 192.168.2.14 | Gitlab | 提交代码 | CentOS 7.4 | 192.168.2.15 | jenkins | Jenkins、docker | CentOS 7.4 | 192.168.2.17 | Docker1 | Harbor、docker | CentOS 7.4 | 192.168.2.1 | Docker2 | 生产环境、docker |
?安装前准备
[root@Gitlab ~]# ssh-keyscan -t rsa #给每台机器做免登;回车即可
.......
...
[root@Gitlab ~]# for i in 14 15 17 1;do ssh-copy-id root@192.168.2.$i;done
这里其他三个机器省略 为避免后期遇到问题全部设置免登
1、安装Gitlab与Jenkins
参考: Gitlab与Jenkins构建CICD环境
2、安装Docker、Harbor
参考:Docker简介与安装、Docker镜像的仓库(Harbor)
3、环境工作流程介绍
开发根据git标签提交代码,Jenkins拉取代码构建镜像上传到Harbor中,然后docker主机从Harbor中拉取镜像,并根据指令运行容器
配置信任关系
[root@jenkins ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://w4uieobw.mirror,aliyuncs.com"],
"insecure-registries": ["192.168.2.17"]
}
保存
[root@jenkins ~]# systemctl restart docker
————————————————————————————————————————————————————————————————————————
[root@Docker1 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://w4uieobw.mirror,aliyuncs.com"],
"insecure-registries": ["192.168.2.15"]
}
保存
[root@Docker1 ~]# systemctl restart docker
[root@Docker1 ~]# docker-compose up -d
————————————————————————————————————————————————————————————————————————
[root@Docker2 ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://w4uieobw.mirror,aliyuncs.com"],
"insecure-registries": ["192.168.2.17"]
}
保存
[root@Docker2 ~]# systemctl restart docker
?上传java项目
[root@jenkins ~]# mkdir name && cd name
[root@jenkins name]# git clone git@192.168.2.14:zs/web.git
正克隆到 'web'...
remote: Enumerating objects: 97, done.
remote: Counting objects: 100% (62/62), done.
remote: Compressing objects: 100% (38/38), done.
remote: Total 97 (delta 7), reused 50 (delta 5), pack-reused 35
接收对象中: 100% (97/97), 11.12 KiB | 0 bytes/s, done.
处理 delta 中: 100% (19/19), done.
——————————————————————————————————————————————
[root@jenkins name]# ls
web
[root@jenkins name]# cd web/
[root@jenkins web]# ls
index.html
[root@jenkins web]# git rm index.html
rm 'index.html'
[root@jenkins web]# ls
[root@jenkins web]# ls
test1 time.java
[root@jenkins web]# git commit -m "add docker"
[main 5308625] add docker
1 file changed, 1 deletion(-)
delete mode 100644 index.html
——————————————————————————————————————————————
[root@jenkins web]# git push origin main #这里注意有的是main有的是master
Counting objects: 40, done.
Compressing objects: 100% (26/26), done.
Writing objects: 100% (39/39), 5.38 KiB | 0 bytes/s, done.
Total 39 (delta 1), reused 35 (delta 1)
To git@192.168.2.14:zs/web.git
efce82e..4e15596 main -> main
配置jenkins创建一个新任务
?修改完成保存,构建一下进行查看pom.xml路径
[root@jenkins ~]# cd /var/lib/jenkins/workspace/Java/test1/
[root@jenkins test1]# ls
pom.xml src target
[root@jenkins test1]# pwd #复制路径
/var/lib/jenkins/workspace/Java/test1
继续配置Java项目
cp /var/lib/jenkins/workspace/Java/test1/target/test1.war /root/tomcat && cd /root/tomcat && docker build -t java:v1 --no-cache . && docker tag java:v1 192.168.2.17/tomcat/java:v1 ?&& docker login -u admin -p Harbor12345 192.168.2.17 && docker push 192.168.2.17/tomcat/java:v1 && ssh root@192.168.2.1 "docker pull 192.168.2.17/tomcat/java:v1 && docker run -d -p 8080:8080 192.168.2.17/tomcat/java:v1"
?保存
在jenkins上编写dockerfile文件
[root@jenkins ~]# cd tomcat
[root@jenkins tomcat]# vim Dockerfile
FROM tomcat
RUN rm -rf /usr/local/tomcat/webapps/*
WORKDIR /usr/local/tomcat/webapps/
COPY test1.war /usr/local/tomcat/webapps/
VOLUME /usr/local/tomcat/webapps/
EXPOSE 8080
CMD ["catalina.sh","run"]
保存
构建前需要在Harbor页面创建一个项目,项目名称为tomcat(这里省略。。。)
?进行构建
?构建完成后查看docker2 上的tomcat服务
[root@Docker2 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fddf546b2317 192.168.2.17/tomcat/java:v1 "catalina.sh run" 3 minutes ago Up 3 minutes 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp xenodochial_bartik
进行访问测试
?收工
|