一、Docker安装
//查看当前系统内核版本,docker要求是高于3.10
Uname -r
//更新yum包到最新
Sudo yum update
//安装需要的软件包 yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
//设置yum源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
//可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
//安装docker #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版18.03.1
sudo yum install docker-ce
sudo yum install docker-ce-18.03.1.ce
//启动并加入开机启动
sudo systemctl start docker
sudo systemctl enable docker
//验证安装docker是否成功
docker version
//在docker中安装jenkins
docker run -p 8080:8080 -p 50000:50000 -v jenkins_data:/var/jenkins_home jenkinsci/blueocean
登录Jenkins地址(http://106.52.128.245:8080)
//查看容器列表(再开一个连接会话)
docker ps
//进入容器
docker exec -it b3d1db18f8c5 /bin/bash
//获取密钥(d2b92eb8520f4df6b8b313f4a618eaa4)
解锁Jenkins后,安装推荐的插件,配置用户名密码,重启Jenkins,登录(sunhuansheng/1990)
三、Jenkins全局工具配置
1.安装JDK
在容器中查看JDK版本和所在目录
java -version --openjdk version "1.8.0_212"
echo $JAVA_HOME --/usr/lib/jvm/java-1.8-openjdk
配置JDK(Docker中是默认已经安装了JDK的包)
系统管理—全局工具配置----JDK
2.安装Maven
系统管理—全局工具配置----Maven
3.下载安装Maven插件
(Jenkins默认是不支持构建Maven项目)
系统管理—插件管理–可选插件—插件名称 Maven Integration
4.准备Git环境
在git上创建一个项目仓库,在本地进行克隆并创建一个springboot的单体应用,创建一个接口用于测试功能的变化
在Idea中输错密码后,一直提示权限认证不通过,不再弹出输入密码的框框,这个需要如下处理:File-setting-Password-Dont save…,重启IDEA再次clone项目就有密码输入提示,如果还不奏效,采用如下方式
5.将代码推送到git服务器上
第一步:git add .
第二部:执行git cz或者git commit -m”提交内容的说明”
第三步:git pull --rebase(必须加rebase不然别人的代码会被覆盖)
第四步:git push
四、Jenkins实现Springboot项目自动部署
1.新建一个发布任务(maven)
2.配置git仓库地址
3.项目打包clean install
4.立即构建
这一步只是拉取git上的代码并打包,并没有发布运行
第一构建的时间非常长,大概20多分钟
5.构建失败了解决方法
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project springdemo-docker: Execution default-compile of goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile failed: Plugin org.apache.maven.plugins:maven-compiler-plugin:3.8.1 or one of its dependencies could not be resolved: Could not transfer artifact org.ow2.asm:asm:jar:6.2 from/to central (https://repo.maven.apache.org/maven2): GET request of: org/ow2/asm/asm/6.2/asm-6.2.jar from central failed: Connection reset -> [Help 1]
在项目的pom.xml文件中增加蓝色字体部分
org.springframework.boot
spring-boot-maven-plugin
org.apache.maven.plugins
maven-compiler-plugin
3.8.1
6.Jenkins启动成功之后执行shell脚本
[INFO] Installing /var/jenkins_home/workspace/springdemo-docker/target/springdemo-docker-0.0.1-SNAPSHOT.jar to /var/jenkins_home/.m2/repository/com/example/springdemo-docker/0.0.1-SNAPSHOT/springdemo-docker-0.0.1-SNAPSHOT.jar
#!/bin/bash
#服务名称
SERVER_NAME=springdemo-docker
# 源jar路径,mvn打包完成之后,target目录下的jar包名称,也可选择成为war包,war包可移动到Tomcat的webapps目录下运行,这里使用jar包,用java -jar 命令执行
JAR_NAME=springdemo-docker-0.0.1-SNAPSHOT
# 源jar路径
#/usr/local/jenkins_home/workspace--->jenkins 工作目录
#demo 项目目录
#target 打包生成jar包的目录
JAR_PATH=/var/jenkins_home/workspace/springdemo-docker/target
# 打包完成之后,把jar包移动到运行jar包的目录--->work_daemon,work_daemon这个目录需要自己提前创建
JAR_WORK_PATH=/var/jenkins_home/workspace/springdemo-docker/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 &
7.在容器中验证是否部署完成
docker exec -it b3d1db18f8c5 /bin/bash
curl 127.0.0.1:8088/getTestapi
8.容器映射8088端口
exit
systemctl restart docker
docker rm $(sudo docker ps -a -q)
docker run -p 8080:8080 -p 8088:8088 -p 50000:50000 -v jenkins_data:/var/jenkins_home jenkinsci/blueocean
服务器的会话窗口一关闭,接口和jenkins就访问不了,这说明我们的docker是在前台加载运行的,需要设置成后台启动,并且是开机自启动的(后续会更新解决)
五、docker常用命令
设置docker系统启动:systemctl enable docker
启动docker: systemctl start docker
查看docker状态: systemctl status docker
停止: systemctl stop docker
重启: systemctl restart docker
查看所有容器列表:docker ps –a
查看启动的容器列表:docker ps
启动容器:docker start 容器ID或容器名
重启容器:docker restart 容器ID或容器名
限时关闭容器:docker -t stop 容器ID或容器名,如60秒以内关闭容器:docker -60 stop,容器60秒以内未关闭,则直接关闭容器。
直接关闭容器:docker kill 容器ID或容器名
删除终止状态的容器:docker rm 容器id
删除运行中的容器:docker rm -f 容器id
停止所有容器:docker stop $(docker ps -a -q)
删除所有终止状态的容器:docker rm $(docker ps -a -q)
查看镜像列表:docker images
删除镜像:docker rmi 或者docker rmi 镜像名称:版本(TAG)
删除id为none的镜像:docker rmi $(docker images | grep "^" | awk "{print $3}")
删除所有未使用的镜像:docker rmi $(docker images -q)
查看容器日志:docker logs 容器id