Jenkins自动化部署容器

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 上一篇文章《Dockerfile配置APM监控实现Java容器的性能监控》实现了在tomcat容器中部署APM监控,就着这个话题我们继续扩展一下如何自动化部署。关于自动化部署容器,最常用到的是Jenkins,公司也有相关环境。
版权声明:本文为博主原创文章,未经博主允许不得转载。欢迎访问我的博客 https://blog.csdn.net/smooth00/article/details/81299167

上一篇文章《Dockerfile配置APM监控实现Java容器的性能监控》实现了在tomcat容器中部署APM监控,就着这个话题我们继续扩展一下如何自动化部署。关于自动化部署容器,最常用到的是Jenkins,公司也有相关环境。但是为了全面的学习容器,我这次不用公司的Jenkins环境,而是直接用容器重新部署一套。

前提条件:需要两台装了Docker引擎的Centos7机器,一台作为Jenkins宿主机,一台作为要自动部署容器的宿主机(直接引用上一篇文章提到的设备和tomcat基础文件)。

1、编写Jenkins的Dockerfile,主要是为了安装SVN客户端

# New docker file from zgh
# VERSION 1.1
# Author: zgh

#基础镜像
FROM jenkins:2.60.3

#作者
#MAINTAINER <zgh@rexen.com.cn>
USER root

#安装SVN客户端(容器hosts不能在镜像中修改)
RUN apt-get install -y subversion

USER jenkins
#默认工作目录
WORKDIR /var/jenkins_home

说明:jenkins尽量选最新版本的,本次用的是2.60.3版。

2、生成Jenkins容器

先是在Dockerfile目录下build一个jenkins镜像(后面的.表示路径,别忽略)

docker build -t jenkins-zgh:v1.1 .

然后通过以下命令运行容器,注意:由于连接公司的SVN服务器需要修改hosts文件,但是我们不应直接在容器中修改,而又无法在Dockerfile中配置(因为hosts文件是在启动容器时才被加载生成),所以我们需要在这里add-host一下SVN的地址。

docker run --name jenkins-zgh -d --restart=unless-stopped -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home --add-host rexen-products:172.17.2.13 jenkins-zgh:v1.1

执行以上命令前,还需要在主机上创建一下卷目录(/var/jenkins_home,实现将jenkins容器中的配置及项目文件都固化到宿主机上)。执行完命令,就生成了一个端口为8080,hosts中加了SVN(rexen-products   172.17.2.13)地址的Jenkins了。

3、配置Jenkins

容器启动后,就可以连接Jenkins,需要做一些初始化配置,另外对于本次操作来说,还需要安装配置一些插件(有的插件可能默认已安装):SSH插件:(Publish Over SSHSSH Agent)、Maven插件(Maven Integration plugin)、Docker插件(Docker Commons PluginDocker Pipeline)等。

(1)配置SSH(系统管理-->系统设置-->Publish over SSH)

配置项包括Passphrase(远程SSH登录linux的密码)、SSH Servers(Name、Hostname、Username、Remote Directory),Remote Directory(远程操作目录,该配置很关键,远程安装部署容器就通过这个目录操作)。最后通过Test Configuration来测试一下SSH是否能够远程访问。以下是我配置的SSH Servers, 其中Remote Directory配置为 /home:

(2)其他配置

如果只是单纯的实现Docker自动部署,没有什么需要额外的配置,Jenkins Location可能需要配置一下Jenkins的IP和端口,Subversion选择默认的版本1.8。如果不是用SVN管理Dockerfile,而是用GitHub,那就需要配置一下GitHub Servers。如果Docker镜像还想自动发布到registry上,那还要再配置一下Docker registry的相关参数。

4、将需要构建的容器项目上传SVN

(1)配置pom.xml,由于只做容器简单构建,不需要代码编译,所以写的比较简单:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
	<groupId>dockerManven</groupId>
	<artifactId>dockerManven</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>dockerManven</name>
  <url>http://maven.apache.org</url>
  <build>
    <plugins>
         <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>1.0.0</version>
            <configuration>
                <imageName>tomcat-docker:v1.4</imageName>
                <dockerDirectory>${basedir}</dockerDirectory> <!-- 指定 Dockerfile 路径-->
                <!-- 这里是复制 jar 包到 docker 容器指定目录配置,也可以写到 Docokerfile 中 -->
                <resources>
                    <resource>
                        <targetPath>/usr/local/tomcat</targetPath>
                        <directory>${project.build.directory}</directory>
                        <!--<include>${project.build.finalName}.jar</include>-->
                    </resource>
                </resources>
            </configuration>
        </plugin>   
    </plugins>
</build>
</project>

(2)我们将上一篇文章《Dockerfile配置APM监控实现Java容器的性能监控》(具体如何部署tomcat容器及APM监控参照这篇文章)提到的tomcat容器Dockerfile及相关文件,连同pom.xml都提交到SVN服务器上:

5、创建Jenkins项目

选择构建一个Maven项目,项目名称:TestDocker

(1)源码管理,选择Subversion,将上面所上传的SVN项目路径配置到Repository URL,选择SVN账号(首次需要Add账号)

(2)Build项填写pom.xml

(3)构建后操作

由于没有代码编译这一环节,所以上面的build操作其实没有实际意义,所以【构建后操作】成为最关键的一步,我们需要用这一步,将Dockerfile及相关文件发送到远程端Linux,并执行docker build和docker run操作(当然你也可以改成在本地docker build,然后docker push到Repository,最后通过SSH远程命令在远程端Linux上执行docker pull和docker run)。

本次要SSH发送的文件目录,含有子目录apminsight,所以需要在一次Transfers Set配置中用逗号分隔,因为SSH远程发送默认不会递归发送子文件夹,所以分成多目录发送,Source files支持用逗号分隔发送多个文件夹,如下所示:

Remote directory很关键,由于以上第3步配置Jenkins时,SSH的Remote directory配置为了 /home,所以这里配置完后,操作目录就相当于指向了 /home/TestDocker,加上配完的Source files,相当于告诉jenkins将SVN项目下的*和apminsight/*发送到远端Linux(172.17.2.84)下的 /home/TestDocker 目录下。

(1)本次我配了两项Transfers Set,第一项只配置Exec command,其他不配置,主要是远程清除历史创建的容器和删除历史构建文件,以便做到反复构建。

Exec command中的代码为:

#docker rm -f  tomcat-docker:v1.4 
#删除已建的容器,防止容器名,端口冲突
docker ps | grep tomcat-docker | grep -v "grep" | awk '{print $1}' | xargs docker rm -f
sleep 1
#删除已构建的镜像,防止镜像名冲突
docker images | grep tomcat-docker | grep -v "grep" | awk '{print $3}' | xargs docker rmi
#删除SSH传输过来的历史构建文件
rm -rf /home/TestDocker

(2)添加和配置第二项Transfers Set,实现传输待构建的Dockerfile及相关文件,并执行docker build和docker run

Exec command中的代码为:

sleep 1
cd /home/TestDocker
docker build -t tomcat-docker:v1.4 . 
sleep 1
docker run --name docker-tomcat -d --restart=unless-stopped -p 8088:8080 -e APM_HOST=172.16.1.251 -e APM_IS_OPEN=false -v /opt/tomcat-logs:/usr/local/tomcat/logs tomcat-docker:v1.4    #运行镜像生成容器

这样就基本配置完了(如果需要发送邮件和执行定时构建项目,就按网上说的通用方式继续配置),直至保存项目。

6、构建Docker项目

对已创建的项目,点击构建,就能看到容器的build过程

最后看到docker run成功后,项目也就SUCCESS了

验证一下容器是否在远程Linux下成功启动(通过docker ps查看),我这是直接通过Rancher平台查看:

目录
相关文章
|
23天前
|
jenkins 持续交付
Jenkins自动化部署脚本
Jenkins自动化部署脚本
27 0
|
2月前
|
IDE jenkins Java
告别繁琐配置:Alibaba Cloud Toolkit插件打破Jenkins自动化部署的局限
告别繁琐配置:Alibaba Cloud Toolkit插件打破Jenkins自动化部署的局限
100 0
|
2月前
|
jenkins 应用服务中间件 持续交付
Git + Jenkins 自动化 NGINX 发布简易实现
Git + Jenkins 自动化 NGINX 发布简易实现
|
4天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器技术融合实践
【4月更文挑战第15天】 在当今快速发展的信息技术时代,传统的IT运维模式已难以满足业务敏捷性的需求。本文旨在探讨如何通过整合DevOps理念和容器技术来构建一个高效的自动化运维体系。文章将详细阐述DevOps的核心原则、容器技术的基础知识,以及两者结合的优势。此外,文中还将分享一系列实践经验,包括持续集成/持续部署(CI/CD)流程的搭建、微服务架构的应用,以及监控和日志管理策略的优化,以期帮助企业实现快速、可靠且安全的软件交付过程。
|
14天前
|
jenkins 测试技术 持续交付
软件测试|docker搭建Jenkins+Python+allure自动化测试环境
通过以上步骤,你可以在Docker中搭建起Jenkins自动化测试环境,实现Python测试的自动化执行和Allure报告生成。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
34 6
|
27天前
|
运维 监控 Devops
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
在数字化转型的浪潮中,企业的IT基础设施和软件交付模式正经历着深刻的变革。传统的运维方式已难以满足快速迭代、灵活扩展的现代业务需求。本文将探讨如何通过容器技术实现高效的自动化运维体系,重点分析持续集成(CI)与持续部署(CD)的实践方法及其对企业运维效率的影响。通过引入微服务架构、容器编排、DevOps文化等概念,我们旨在为读者提供一套全面的自动化运维解决方案,以支持业务的敏捷性和可扩展性。
|
3月前
|
前端开发 jenkins 持续交付
前后端分离项目知识汇总(GateWay,Nacos配置中心,Jenkins自动化部署,项目总结)-3
前后端分离项目知识汇总(GateWay,Nacos配置中心,Jenkins自动化部署,项目总结)
63 0
|
3月前
|
jenkins Java 持续交付
前后端分离项目知识汇总(GateWay,Nacos配置中心,Jenkins自动化部署,项目总结)-2
前后端分离项目知识汇总(GateWay,Nacos配置中心,Jenkins自动化部署,项目总结)
52 0
|
3月前
|
前端开发 Java jenkins
前后端分离项目知识汇总(GateWay,Nacos配置中心,Jenkins自动化部署,项目总结)-1
前后端分离项目知识汇总(GateWay,Nacos配置中心,Jenkins自动化部署,项目总结)
51 0
|
3月前
|
JavaScript jenkins 应用服务中间件
Jenkins + Github + Nginx 自动化部署 Vue 项目
Jenkins + Github + Nginx 自动化部署 Vue 项目
148 0