docker安装jenkins部署并且自动化打包部署java服务

一、准备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目录查看日志





最后,有问题请教联系方式在主页

你可能感兴趣的:(docker安装jenkins部署并且自动化打包部署java服务)