通过几天的学习和自己的理解,整理了下Docker+Jenkins的自动部署教程,如有不足,还请多多指点,谢谢!
Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。
结构:客户端→Docker_Host(宿主机)→仓库
三个概念 容器→镜像→仓库
传统的部署项目,当项目完成后,需要我们自己从代码仓库中拉取代码到本地,完成打包,然后上传到服务器,然后配置项目的运行环境并启动。这样显然有一点的缺陷,我们在开发中存在的一些bug由于不能即时的发现,导致后期修复bug而存在导致连锁效应的风险。而且我们经常修改代码后,需要重新打包,然后上传到服务器,然后运行,当项目很多的时候,这样的一些重复性机械操作导致我们有些力不从心。
而我们使用Jenkins后真正的帮我们实现了自动化部署,当我们代码更新后,push到代码仓库中,我们只需在Jenkins的可视化界面点击构建项目,Jenkins便会根据我们配置的仓库地址自动拉取代码,自动打包,并运行,完成自动化部署。
Docker 要求 CentOS 系统的内核版本在 3.10以上 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker。
uname -r
yum -y update
yum remove docker docker-common docker-selinux docker-engine
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r
sudo yum install -y docker-ce #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版18.03.1
systemctl start docker //启动docker
systemctl enable docker //设置为开机启动
docker version
docker search jenkins
jenkins 表示你要搜索的镜像名,DESCRIPTION中包含jenkins的也会显示出来
docker pull jenkins/jenkins
- 注意这里拉取的是jenkins/jenkins版本,因为先前的jenkins版本只有2.60,导致安装jenkins插件失败
- 拉取的时候可以指定版本,例如docker pull java:8 表示拉取的java版本为8; 不指定版本则默认为最新版本 latest
docker run --name myjenkins -d -p 8081:8080 -p 8085:8085 jenkins/jenkins
–name myjenkins 指定容器NAME为myjenkins
-d 表示后台运行
-p 8081:8080 表示Docker Host(运行Docker的主机)端口 与Docker容器内运行的端口映射,
8081表示DockerHost的端口,8080即容器内的端口; 外部访问8081即可访问到Docker容器的8080端口
jenkins/jenkins 表示启动的镜像为jenkins/jenkins ,查看本地镜像可以通过docker images查看
说明:
1.容器内的端口外部无法直接访问,因为要配置Docker Host与容器的端口映射,映射可以配置多个;
由于后面需要部署项目,提前把项目的端口号-p 8085:8085配置好,不配置的也可以,后面去修端口映射文件即可。
2.其实我们也可以省略第二步pull操作,直接启动一个容器,Docker会先去本地images中查看是否有这个镜像,如果没有的话会去DockerHub仓库去下载。
进入安装Jenkins的容器内
docker exec -it myjenkins bash // 进入指定容器,myjenkins表示我们启动容器时给容器指定的名称
cat /var/jenkins_home/secrets/initialAdminPassword` //查看密码,复制密码粘贴到文本框内
操作图示:
或者
docker ps -a
docker exec -u 0 -it 21ee4816aac1 /bin/bash
cat /var/jenkins_home/secrets/initialAdminPassword
点击安装推荐插件:
echo $JAVA_HOME
获取jdk安装路径,将路径复制到JAVA_HOME文本框
附shell脚本:
#!/bin/bash
# #!/bin/bash是指此脚本使用/bin/bash来解释执行。其中,#!是一个特殊的表示符,其后,跟着解释此脚本的shell路径。bash只是shell的一种,还有很多其它shell,如:sh,csh,ksh,tcsh,...
# #!/bin/bash只能放在第一行,如果后面还有#!,那么只能看成是注释。
#服务名称
SERVER_NAME=SpringBoot_AutotTest
#源jar路径,mm打包完成之后,target目录下的jar包名称,也可选择成为war包,war包 可移动到Tomcat的。
JAR_NAME=jekins-0.0.1-SNAPSHOT
#target打包生成jar包的目录
JAR_PATH=/var/jenkins_home/workspace/SpringBoot_AutotTest/target # 以具体的打包位置为准,可以先构建一次项目,通过日志查看打包的目录
#打包完成之后,把iar包移动到运行jar包的目录
JAR_WORK_PATH=/var/jenkins_home/workspace/SpringBoot_AutotTest/target
echo "查询进程id-->$SERVER_NAME"
PID=`ps -ef | grep "$SERVER_NAME" | awk ‘{print $2}‘`
echo"得到进程ID: $PID"
echo"结束进程"
for id in $PID
do
kill -9 $id
echo "killed $id"
done
echo"结束进程完成"
#复制jar包到执行目录_
echo" 复制jar包到执行目录:cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH"
cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH
echo"复 制jar包完成"
cd $JAR_WORK_PATH
#修改文件权限
chmod 755 $JAR_NAME.jar
#前台启动
#java -jar $JAR_NAME.jar
#后台启动
BUILD_ID=dontKillMe nohup java -jar $JAR_NAME.jar &
原文:https://www.cnblogs.com/lixiaochong/p/14412383.html