jenkins+docker实现自动编译、打包、构建镜像、容器部署

本文介绍了一个基于Jenkins的持续集成和持续部署(CI/CD)流程。该流程包括代码提交后自动构建、测试、打包,并部署到服务器的过程。具体涉及Jenkins的配置、SSH远程连接、Docker容器化部署及私有镜像仓库的搭建等内容。

一、整个持续集成、自动部署流程

开发push代码到gitlab,触发jenkins自动pull代码,通过maven编译、打包,然后通过执行shell脚本使docker构建镜像并push到私服(或者阿里云)仓库,此操作完成后jenkins服务器上再执行SSH命令登录到部署服务器,docker从仓库(私服)拉取镜像,启动容器。整个操作流程完成。

二、服务器软件环境配置

 由于条件所限,故只用两台机器作为搭建环境。

三、jenkins配置

 3.1 安装插件

SSH:用于SSH远程Docker主机执行Shell命令

3.2 添加SSH远程主机

添加访问的凭据:

系统管理-系统配置


 

3.3 开启Docker Remote API

在192.168.1.121上执行:

vim  /lib/systemd/system/docker.service 

重新加载配置文件

systemctl daemon-reload 
systemctl restart docker

开启防火墙的端口

firewall-cmd --zone=public --add-port=2375/tcp --permanent 
firewall-cmd --reload
firewall-cmd --zone=public --query-port=2375/tcp

3.4 docker 配置

系统管理-系统设置-云  新增

四、部署私有镜像仓库 

Docker Hub作为Docker默认官方公共镜像;如果想自己搭建私有镜像仓库,官方也提供registry镜像,使得搭建私有仓库非常简单。
在192.168.1.121部署:

docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry

接下来测试registry可用性。

为了更快的获取镜像,这里使用了阿里云的镜像加速器。
由于Docker CLI客户端默认以HTTPS访问,而部署的registry并未提供HTTPS,因此,需要在pull镜像的Docker主机(192.168.1.237,192.168.1.121)添加HTTP可信任: 

vi /etc/docker/daemon.json 

五、构建Tomcat基础镜像

vim Dockerfile

添加如下内容: 

FROM centos:7
MAINTAINER www.aliangedu.com

ENV VERSION=8.5.39
ENV JAVA_HOME /usr/local/jdk

RUN yum install wget -y

RUN wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz && \
    tar zxf apache-tomcat-${VERSION}.tar.gz && \
    mv apache-tomcat-${VERSION} /usr/local/tomcat && \
    rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* 

EXPOSE 8080
CMD ["catalina.sh", "run"]

 构建镜像并push到192.168.1.121仓库:

docker build -t 192.168.1.121:5000/hxkg-tomcat-8.5 .
docker push  192.168.1.121:5000/hxkg-tomcat-8.5 

六、新建任务

任务配置

在Jenkins本机服务器(192.168.1.237)构建镜像并推送到镜像仓库(192.168.1.121),并SSH远程连接到Docker主机(192.168.1.121,这里可以新增一台单独的服务器来拉取仓库中的镜像)

使用推送的镜像创建容器:

获取仓库中构建的tomcat镜像,基于此镜像将编译打包后的war包拷贝到tomcat webapps目录,构建镜像并推送192.168.1.121仓库。

上图中,在Jenkins主机执行的Shell命令如下: 

REPOSITORY=192.168.1.121:5000/zpzc
# 构建镜像
cat > Dockerfile << EOF
FROM 192.168.1.121:5000/hxkg-tomcat-8.5:latest
RUN rm -rf /usr/local/tomcat/webapps/*.war
COPY target/*.war /usr/local/tomcat/webapps
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
EOF
docker build -t $REPOSITORY .
# 上传镜像
docker push $REPOSITORY

镜像构建完成后, 使用ssh远程登录部署服务器(192.168.1.121)上删除已经存在的容器和拉取的部署镜像,重新部署新的容器。

上图中,SSH远程Docker主机执行的Shell命令如下:

REPOSITORY=192.168.1.121:5000/zpzc
# 部署
docker rm -f zpzc
docker rmi $REPOSITORY
docker run -d --name zpzc  -p 28888:8080 -v /usr/java/jdk1.8.0_171:/usr/local/jdk $REPOSITORY

 注意,此处需要在部署服务器上安装jdk环境,挂载jdk目录到容器中,因为tomcat镜像文件Dockerfile没有配置jdk环境:

七、构建任务

 执行日志:

八、测试

在192.168.1.121上查看镜像:

查看容器:

 postman接口测试:

九、遇到的异常

1.

解决:在192.168.1.237上执行 sudo gpasswd -a jenkins root;sudo service jenkins restart。将jenkins用户加入到root用户组中获取管理员权限。详见:https://www.cnblogs.com/informatics/p/8276172.html

2.

解决: 这个问题可能是由于客户端采用https,docker registry未采用https服务所致。一种处理方式是把客户对地址“192.168.1.121:5000”请求改为http。在”/etc/docker/“目录下,创建”daemon.json“文件。在文件中写入:{ "insecure-registries":["192.168.1.121:5000"] }   详见:https://www.cnblogs.com/hobinly/p/6110624.html

3.

解决:这是因为我在jenkins配置shell脚本的时候没有写全路径导致找不到tomcat catalina.sh脚本。

改为:

### 使用Git、Jenkins、Maven、Tomcat和Docker构建Web项目的自动部署平台 为了实现一个完整的自动部署平台,需要结合多个工具的功能。以下是详细的实现方案: #### 1. Git用于版本控制 Git作为版本控制系统,负责管理代码的版本历史和协作开发。在项目中,所有代码变更都需要提交到Git仓库。通过配置Jenkins与Git集成,可以触发基于代码更新的自动化流程。 - 配置Git仓库地址并设置分支监控[^1]。 - 在Jenkins中添加Git插件以支持Git操作。 ```groovy stage('Checkout') { steps { git 'https://gitee.com/qiliping/jinkens-test.git' } } ``` #### 2. Maven用于构建项目 Maven是一个强大的构建工具,能够处理Java项目的依赖管理和编译打包。在Jenkins中,可以通过执行Maven命令完成项目的构建和测试。 - 使用`mvn clean package`清理旧文件并生成新的可部署包[^1]。 - 运行单元测试以确保代码质量。 ```groovy stage('Build') { steps { sh 'mvn clean package' } } stage('Test') { steps { sh 'mvn test' } } ``` #### 3. Jenkins作为CI/CD的核心工具 Jenkins是整个自动化流程的核心,负责从代码检出到最终部署的所有步骤。它通过Pipeline脚本定义具体的构建部署逻辑。 - 定义Pipeline脚本以串联各个阶段的操作[^1]。 - 配置Post Actions处理成功或失败的情况。 ```groovy post { success { echo 'Build, test, and deployment to Docker successful!' } failure { echo 'Build or deployment failed.' } } ``` #### 4. Docker用于容器化应用 Docker提供了一个轻量级的虚拟化环境,可以将应用程序及其运行时依赖打包镜像。这确保了应用在不同环境中的一致性。 - 构建Docker镜像并将项目打包容器。 - 启动容器实例以运行应用。 ```groovy stage('Build Docker Image') { steps { script { def appName = 'demo1' def version = '0.0.1' sh "docker build -t ${appName}-${version} ." } } } stage('Run Docker Container') { steps { script { def appName = 'demo1' def version = '0.0.1' sh "docker run -d --name ${appName}-${version} -p 89:8089 ${appName}-${version}" } } } ``` #### 5. Tomcat作为应用服务器 Tomcat是一个流行的Java Servlet容器,适合运行基于Java EE规范的应用程序。如果选择直接使用Tomcat而非Docker,则需额外配置Jenkins上传WAR文件到Tomcat服务器。 - 将生成的WAR文件复制到Tomcat的`webapps`目录[^2]。 - 重启Tomcat服务以加载新部署的应用。 ```bash cp target/*.war /path/to/tomcat/webapps/ service tomcat restart ``` --- ### 注意事项 - 确保所有工具已正确安装并配置好相关环境变量。 - 配置安全权限,避免敏感信息泄露。 - 定期维护和优化流水线脚本,提升效率。 ---
评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值