一、准备docker环境
Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看CentOS的内核版本。(uname -a)
1.在安装docker 之前先要清除之前的版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.添加docker国内源
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.查看仓库中docker的版本,然后更新缓存并安装(如果要安装特定版本,可以在指定下载如:docker-ce-18.06.1.ce)
yum list docker-ce --showduplicates | sort -ryum makecache fast
yum -y install docker-ce-18.06.2.ce-3.el7
4.启动docker
systemctl start docker && systemctl enable docker
5.设置国内镜像加速器 vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"],
"data-root": "",
"log-driver": "json-file",
"log-opts": {"max-size":"200m", "max-file":"3"}
}
systemctl daemon-reload && systemctl restart docker 重启docker
二、拉取jenkins最新的镜像,并且启动起来
1. docker pull jenkins/jenkins 默认拉取最新的版本
2. 创建jenkins的工作目录 最好创建到数据盘的目录下
mkdir -p /opt/jenkins
chmod 777 /opt/jenkins 赋予相应权限
3.启动jenkins镜像
docker run --restart=always -m 2048M -p 8081:8080 -p 50000:50000 -v /etc/localtime:/etc/localtime --name jenkins -v /opt/jenkins:/var/jenkins_home -d jenkins/jenkins:latest
下面是参数的详细解读
--restart docker的开机自启动
-m 2048M 给jenkins分配最大内存
-p 8081:8080 jenkins内部默认端口是8080,这里我们映射成我们自己定义喜欢的端口
-p 50000:50000 同上默认不能修改,修改后面会出错
-v /etc/localtime:/etc/localtime 容器内部时区独立,同步宿主机和容器的时间
--name jenkins 启动来的容器命名
-v /opt/jenkins:/var/jenkins_home 挂载逻辑卷目录 , /var/jenkins_home目录为容器jenkins工作目录,我们将硬盘上的一个目录挂载到这个位置,方便后续更新镜像后继续使用原来的工作目录。这里我们设置的就是上面我们创建的
docker ps 查看启动的容器。 状态为up启动成功,其他状态,使用docker logs jenkins 查看日志寻找问题
3.ip加端口在浏览器下访问,温馨提示:如果是云服务需要开通安全组8081和50000.关闭防火墙和selinux,物理机关闭防火墙和selinux ,开通和关闭方法请百度
出现下面图片画面就是启动成功
三、配置和使用jenkins
1.查看访问jenkins的密码
cat /opt/jenkins/secrets/initialAdminPassword 复制黏贴到上面访问的内容中
2.配置jenkins
选择第一个,推荐安装,如果出现无法连接jenkins,请查看上面更换本地源是否正确或者电脑网络问题选择重试
点击使用admin账号继续
保存并完成
后面开始使用jenkins
3.修改jenkins的admin账号密码
设置,下滑找到密码
修改完之后保存,重新登录
4.配置jenkins和安装一些必要的插件
首先安装必要的git、jdk、maven
系统管理<全局工具配置
git使用默认就行
jdk 点击新增jdk 取个别名jdk1.8
路径是/opt/java/openjdk
以后的容器中的jenkins的jdk位置不知道会不会变,最好亲自进入容器查看
docker exec -i -t jenkins /bin/bash
echo $JAVA_HOME
maven 点击新增maven 取个名字 选择你要安装的maven版本
最后保存
再来安装一些插件:
系统管理<插件管理<可选插件 搜索插件Ant In Workspace 配置jdk+maven环境的插件
Publish Over SSH把文件通过ssh发布到服务器的插件
Maven Integration java项目构建
安装
配置Publish Over SSH:
系统管理<系统设置 滑倒最下面配置Publish over SSH
点击新增
点击高级
点击使用密码或者密钥
三个填一个就行,有密码使用密码,至于密钥,云服务器如果有密钥对直接复制密钥就行,也可以用ssh-keygen,在复制到目标服务器上就行,具体操作不在这里细说,详情百度ssh密钥登入服务器
填完之后test一下,出现success即可。保存。
四、上面准备工作完成,现在让我们来构建一个项目。
新建任务<取一个项目名称构建一个maven项目
描述为测试项目
源码管理勾选git,填入代码地址,添加凭据,填写用户和密码
指定分支,可以填分支名称
构建触发器这里把原本的去掉
配置发布jar包规则
这上面的都是根据项目来填写,每个java项目存放jar包可能略微不同
最后保存完成。
现在我们在目标服务创建项目的路径,还有写dockerfile和启动镜像的脚本
cd /opt/project
mkdir email
cd email
mkdir backup 存放jar包的备份 mkdir build #jenkins远程传出jar包的路径 mkdir docker 项目日志
vim Dockerfile
#使用的基础镜像
FROM java:8u111
#作者
MAINTAINER jiangming
#把当前目录下的jar包添加到镜像
ADD ./XXX.jar /usr/local/XXX.jar
#启动时运行jar包,并把日志输出到指定目录中
CMD java -server -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$HEAP_ERROR_PATH -jar -Duser.timezone=GMT+08 /usr/local/XXX.jar --spring.profiles.active=dev > /usr/local/logs/XXX.log
XXX为项目名 dev为项目启动的环境
vim ps.sh 写发布脚本
#!/bin/bash
export BUILD_ID=dontKillMe
web=XXX
webdir=/opt/projects/XXX
date=$(date +%Y%m%d%H%M)
echo "####### 备份jar包 ##########"
cp $webdir/$web.jar $webdir/backup/$web-$date.jar
rm -rf $webdir/$web.jar
mv $webdir/build/*.jar $webdir/$web.jar
echo "####### 删除当前容器 ##########"
docker stop $web #先停止容器运行
sleep 3
docker ps -a | grep $web|grep -v "grep"|awk '{print $1}' |xargs docker rm -f #删除容器
sleep 1
echo "####### 删除当前镜像 ##########"
docker images |grep $web | grep -v "grep" | awk '{print $3}' |xargs docker rmi #删除镜像
sleep 1
echo "####### 制作最新的当前镜像 ##########"
cd $webdir
docker build -t $web . #执行dockerfile,生成项目镜像
sleep 3
echo "####### 启动当前最新的容器 ##########"
docker run -m 2048M --restart=always --network=host -v $webdir/docker/:/usr/local/logs/ -d --name=$web $web:latest
sleep 2
echo "#######判断项目是否启动成功 ##########"
pid=`ps aux|grep $web|grep -v grep |grep -v "/bin/sh"| awk '{print $2}'` #打印项目启动后的pid
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
echo "################################项目启动失败################################"
cat dsadsadas #使jenkins发布失败,导致构建项目不稳定
else
echo "################################项目启动成功#########################################"
fi
上面脚本和dockerfile只是借鉴操作,可以模仿中间出现问题请自行调整,也可以来本人
现在我们所有的准备工作都完毕。现在点击构建
打开控制台输出,
拉一些项目依赖jar包第一次有点慢,以后就不会了
success发布成功
现在去服务器底下docker ps ,查看服务有没有启动起来
项目服务已经up,说明启动成功,如果启动失败,可以docker logs email 查看日志,也可以去项目底下的docker目录查看日志
最后,有问题请教联系方式在主页