jenkins 构建docker镜像(docker搭建jenkins+maven代码构建部署平台)
jenkins 构建docker镜像
docker搭建jenkins+maven代码构建部署平台目录
- Docker基本概念
- Docker安装过程(Centos6.9)
- 升级内核
- 安装docker-io
- 基于Docker的jenkins安装
- 拉取应用
- 运行容器
- 跟踪应用log
- 关闭打开容器
- tomcat账户配置
- 配置jenkins,构建部署war应用
- 配置JDK、Maven等参数
- 新建任务构建部署
- 通过ssh脚本部署maven项目到指定Tomcat中
- 配置Publish Over SSH插件
- 编写部署ssh脚本
- 项目构建配置
由于项目开发,经常需要在本地搭一些环境进行开发或测试,大家知道搭环境、装软件、装中间件是件非常麻烦的事情,有些软件的安装可能需要依赖其它环境的安装,如安装rabbitmq首先需要Erlang语言环境,一整套安装下来不仅浪费时间而且还各种问题出现,严重影响开发进度。对于开发者来讲,life is short, 尽一切可能提高开发效率。
Docker的出现对于技术界无疑是一件划时代的事件,Docker由于具体丰富的应用镜像仓库、使用方便及可移植性而深受广大IT从业人员喜爱。用Docker部署或安装相应的应用不用花太多时间在安装过程及细节、依赖上,真正做到开箱即用。本文以jenkins的搭建为例,说明Docker的基本操作过程:拉取镜像、运行容器、文件挂载、跟踪运行、关闭容器等,希望对刚入门Docker的技术爱好者能有所帮助。
Docker基本概念Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。其实Docker最经典的是那张“背有集装箱的海豚”图,这张图充分说明了docker引擎与容器之间的关系。
掌握镜像、容器、仓库基本就对Docker了解得差不多了,就能正确的使用Docker.
- 镜像:可以理解为应用的“源码”或
.exe
安装文件; - 容器:就是镜像运行后的实例,与镜像的关系其实就如“对象”与“类”的关系;
- 仓库:发布镜像的仓库,在仓库中可以下载或拉取各种镜像(应用)而Docker则是一个容器运行所需要的引擎,所有的容器均运行在引擎之中。
升级内核
Centos6.9需要升级内核版本才可以安装Docker,升级过程如下
1.引入key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm
2.yum安装
yum --enablerepo=elrepo-kernel -y install kernel-lt
3.引导文件修改(grub.conf
)
vim /etc/grub.conf
将 default 设置为 0 ,default=0
4.重启
安装docker-io
1.安装EPEL源
yum install http://mirrors.yun-idc.com/epel/6/x86_64/epel-release-6-8.noarch.rpm
2.安装docker-io
yum -y install docker-io
3.启动docker服务
service docker start
拉取应用
运行容器/实例之前,需要从docker hub仓库中拉取相应的镜像,可查看官网关于jenkins镜像上的一些介绍,其中对于安装命令、配置信息及文件目录都有于详细的说明。
从仓库中拉取最新的jenkins,docker pull jenkins
,拉取其它版本的可通过命令docker pull jenkins:<version>
运行容器
运行容器/实例,需要考虑到本地端口与docker容器的映射,以便通过本地主机可以访问。由于容器本身并不会持久化文件,其实docker不建议在容器中进行任何文件有关的写入操作,仅仅当作一个“容器”使用。如果容器应用运行过程中会产生许多重要的数据需要保存或配置,如mysql的db文件,jenkins的插件、配置文件等,则建议将容器的文件挂载到本地,也即volume映射。
docker run -p 8080:8080 -p 50000:50000 -v /usr/local/docker_volume/jenkins:/var/jenkins_home -v /usr/local/apps/maven-3.3.9:/var/maven_home -v /usr/local/apps/maven-3.3.9/repo:/usr/local/apps/maven-3.3.9/repo --name my_jenkins -d jenkins
其中-p表示端口映射,即将本机上的端口映射到容器上的端口;
-v表示文件映射,即本机与容器共享映射,挂载文件
注意:由于jenkins构建maven项目需要依赖maven项目,因此在运行容器的时候将本机的maven_home共享给容器。由于容器运行时需要在本机共享文件中写入,需要写权限,sudo chown -R 1000:1000 /usr/local/docker_volume/jenkins
sudo chown -R 1000:1000 sudo chown -R 1000:1000
运行以上命令,窗口会打印容器id,通过docker ps
可查看运行的容器状态及相关信息。
跟踪应用log
输入docker logs <CONTAINER ID>
即可跟踪容器打印日志,初次启动jenkins会在日志中打印密码,复制后用于登陆jenkins.
关闭打开容器
关闭:docker stop <CONTAINER ID>
打开:docker start <CONTAINER ID>
本例将maven编译后的war部署到远程tomcat,因此需要在tomcat中设置部署权限,编辑/con/tomcat-users.xml
配置文件,加入账户
<role rolename="tomcat"/> <role rolename="admin"/> <role rolename="admin-gui"/> <role rolename="manager"/> <role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-status"/> <user username="admin" password="admin" roles="admin,manager,tomcat,manager-gui,manager-script,manager-jmx,manager-status"/> <user username="root" password="admin" roles="admin,manager,tomcat,manager-gui,manager-script,manager-jmx,manager-status,admin-gui"/>
至此,通过访问http://本机ip:8080
即可访问到jenkins平台,选择默认安装插件,安装成功后选择设置账号等.
配置JDK、Maven等参数
在 “系统设置—> Global Tool Configuration”中添加JDK安装如下图所示
安装“Deploy to container Plugin”插件用于部署war程序
在”系统设置—> 管理插件—>可选插件”中安装
新建任务构建部署
添加svn源码地址、tomcat部署地址
tomcat 部署配置,配置登录tomcat的账号
通过ssh脚本部署maven项目到指定Tomcat中
用以上方法在tomcat自带的deployment实现部署对于服务器性能消耗较大,经常会出现如内存溢出等问题,导致部署失败。采用ssh脚本部署的方式则方便快捷很多,对于内存消耗也没有那么多。
配置Publish Over SSH插件
在”系统设置—> 管理插件—>可选插件”中安装(Publish Over SSH)插件,然后在“系统管理—>系统设置—>Publish over SSH”设置要发布的linux服务器的登录信息,各项配置与具体含义如下图所示。配置完成后,点击【Test Configuration】按钮可测试是否连接上,如显示“Success”则表示配置成功。
编写部署ssh脚本
将以下shell脚本deploy.sh
存放在服务器的/home/admin/data
目录下并给予执行权限chomd +x deploy.sh
,即上图ssh登录配置图中的Remote Directory
目录下。这样配置表示jenkins登录到tomcat所在的linux服务器后可用./deploy.sh
执行部署操作。如果demploy.sh
放在其它目录,则用绝对路径/..dir../..dir../deploy.sh
来执行即可。
#!/bin/bash # 文件:set ff=unix #defined export JAVA_HOME=/usr/local/java # tomcat部署位置 TOMCAT_HOME="/home/admin/data/tomcat-jenkins" # 登录后的服务器用户目录,与上图配置的Remote Directory设置相同 LOGIN_HOME="/home/admin/data" TOMCAT_PORT=10092 PROJECT="$1" #param validate if [ $# -lt 1 ]; then echo "you must use like this : ./deploy.sh <projectname> [tomcat port] [tomcat home dir]" exit fi if [ "$2" != "" ]; then TOMCAT_PORT=$2 fi if [ "$3" != "" ]; then TOMCAT_HOME="$3" fi #shutdown tomcat #"$TOMCAT_HOME"/bin/shutdown.sh #echo "tomcat shutdown" #check tomcat process #tomcat_pid=`/usr/sbin/lsof -n -P -t -i :$TOMCAT_PORT` tomcat_pid=`ps -ef | grep $TOMCAT_HOME | grep -v 'grep\|tail\|more\|bash\|less'| awk '{print $2}'` echo "current :" $tomcat_pid while [ -n "$tomcat_pid" ] do sleep 5 tomcat_pid=`ps -ef | grep $TOMCAT_HOME | grep -v 'grep\|tail\|more\|bash\|less'| awk '{print $2}'` echo "scan tomcat pid :" $tomcat_pid if [ -n "$tomcat_pid" ]; then echo "kill tomcat :" $tomcat_pid kill -9 $tomcat_pid fi done #publish project echo "scan no tomcat pid,$PROJECT publishing" rm -rf "$TOMCAT_HOME"/webapps/$PROJECT cp "$LOGIN_HOME"/war/$PROJECT.war "$TOMCAT_HOME"/webapps/$PROJECT.war #bak project #BAK_DIR=/home/web_as/war/bak/$PROJECT/`date +%Y%m%d` #mkdir -p "$BAK_DIR" #cp "$TOMCAT_HOME"/webapps/$PROJECT.war "$BAK_DIR"/"$PROJECT"_`date +%H%M%S`.war #remove tmp rm -rf "$LOGIN_HOME"/war/$PROJECT.war #start tomcat "$TOMCAT_HOME"/bin/startup.sh echo "tomcat is starting,please try to access $PROJECT conslone url"
项目构建配置
参照下图保存配置后,即可构建maven项目,jenkins会复制编译后的war项目到192.168.1.12
服务器对应的tomcat路径下,然后启动Tomcat部署项目。
到此这篇关于docker搭建jenkins+maven代码构建部署平台的文章就介绍到这了,更多相关docker搭建jenkins+maven内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- springboot与docker(详解SpringBoot项目docker环境运行时无限重启问题)
- 日常操作docker命令(Docker常用命令详解)
- docker nginx 配置详解(Docker 如何安装 Nginx)
- docker怎么创建mysql服务(Docker部署MySQL8集群一主二从的实现步骤)
- 如何查看本机docker的安装目录(使用rpm安装指定版本docker1.12.6的详细步骤)
- 基于docker的平台搭建(基于docker搭建selenium分布式环境)
- docker清理脚本(Docker 清理的常用方法及问题)
- docker中运行项目的配置(Docker中搭建配置Git环境的过程)
- docker分配容器资源(Mac为docker和kubectl添加自动补全命令的方法)
- docker原理和使用方法(docker的一些基本指令)
- 容器之间的通信docker(Docker容器互访的三种方法)
- linux搭建nacos(docker搭建nacos1.3.0的实现)
- docker 容器移植(Docker构建kubectl镜像的实现步骤)
- docker配置redis集群(基于Docker搭建Redis主从集群的实现)
- netcoredocker视频教程(Docker安装部署Net Core实现过程解析)
- dockerfile镜像案例(Dockerfile构建自定义镜像的实现)
- 金球奖只青睐那些会戴珠宝的女人(金球奖只青睐那些会戴珠宝的女人)
- 浙江省一个县,人口超40万,建县历史超1100年(浙江省一个县人口超40万)
- 五代十国南唐历代国君(五代十国南唐历代国君)
- 飞机引进工程师杨隆 匠人匠心,只争朝夕(飞机引进工程师杨隆)
- 三人行,她们是育人路上的 铁三角 团队(她们是育人路上的)
- 阴阳师 孟婆山兔CP不倒 新皮肤草稿 孟婆兔 让痒痒鼠点赞(阴阳师孟婆山兔CP不倒)
热门推荐
- jenkins 构建docker镜像(docker搭建jenkins+maven代码构建部署平台)
- 轻量云服务器和ecs服务器区别(ECS云服务器租用的优势表现在哪些方面?)
- python零基础入门详细教程(Python零基础入门学习之输入与输出)
- docker中的centos镜像为何很小(CentOS 7.x docker使用overlay2存储方式)
- python指定参数教程(详解Python传入参数的几种方法)
- 宝塔面板如何搭建内网网站(宝塔面板搭建云服务器优化教程)
- mysql8.0如何配超时时间(解决MySQL8.0时区的问题步骤)
- linuxftp的下载命令(Linux ftp 命令行中下载文件get与上传文件put的命令应用详解)
- pythonhttp文件服务器(使用Python创建简单的HTTP服务器的方法步骤)
- css样式词大全(超全面CSS样式整理)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9