Jenkins–部署–1.1–打包Maven项目为Docker镜像并运行
1、介绍
通过git上传代码—>使用Jenkins构建自动打包—>把jar包打成docker镜像,运行在docker中
2、linux安装jdk和maven
2.1、安装jdk11
2.2、安装maven(建议)
3、Docker安装Jenkins
参考
Jenkins--基础--02--安装
Docker安装Jenkins(这是我部署的)
4、配置加速器
# 国内的插件仓库地址
http://mirror.xmission.com/jenkins/updates/current/update-center.json
5、配置ssh
目的是为了在linux中能执行shell脚本
5.1、安装ssh插件
安装完成重启一下Jenkins
5.2、添加ssh登录账号凭据
5.3、配置全局ssh
系统管理–>系统配置
6、配置jdk和maven
系统管理 —> 全局工具配置
7、git项目的核心代码
代码结构
7.1、application.yml
server:
port: 8888
servlet:
context-path: /say
7.2、bootstrap.yml
spring:
application:
name: demo1
7.3、docker-entrypoint.sh
#!/bin/bash
# JVM参数
JAVA_OPTS=
# 当JAVA_JVM_OPTS1长度大于0时为真
if [ -n "${JAVA_JVM_OPTS1}" ] ; then
JAVA_OPTS="${JAVA_OPTS} ${JAVA_JVM_OPTS1}"
fi
if [ -n "${JAVA_JVM_OPTS2}" ] ; then
JAVA_OPTS="${JAVA_OPTS} ${JAVA_JVM_OPTS2}"
fi
# 当LOG_OPTS长度==0时为真
LOG_OPTS=
if [ -z "${LOG_OPTS}" ] ; then
LOG_OPTS="-Dlogging.file.name=${LOG_FILE} -Dlogging.file.path=${LOG_PATH}"
fi
# 打印配置参数
echo "JVM启动参数:"${JAVA_OPTS}
echo "日志参数:"${LOG_OPTS}
java -server ${JAVA_OPTS} ${LOG_OPTS} -jar /opt/app/app.jar
7.4、Dockerfile
FROM java:8
# 环境变量
# 内存参数
ENV JAVA_JVM_OPTS1=-Xms1024m
ENV JAVA_JVM_OPTS2=-Xmx1024m
#日志输出路径
ENV LOG_PATH=/var/log/demo1/
ENV LOG_FILE=/var/log/demo1/demo1.log
WORKDIR /opt/app
# 拷贝代码和配置文件
COPY *.jar /opt/app/app.jar
COPY ./config /opt/app/config
# 拷贝脚本到可执行目录
COPY docker-entrypoint.sh /usr/local/bin/
EXPOSE 8888
# 授予权限
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
ENTRYPOINT ["docker-entrypoint.sh"]
7.5、业务代码
8、使用Jenkins部署项目
8.1、创建任务
hello_world_docker
8.2、general配置
打包Maven项目为Docker镜像并运行
8.2.1、丢弃旧的构建
- 问题:服务器资源是有限的,有时候保存了太多的历史构建,会导致Jenkins速度变慢,并且服务器硬盘资源也会被占满。
- 解决方案:
- 保持构建天数
- 保持构建的最大个数
8.3、源码管理
8.3.1、Git
支持主流的github和gitlab代码仓库。
8.3.2、Repository URL
仓库地址
8.3.3、Credentials
- 凭证
- 可以使用以下方式登陆git仓库
- HTTP方式的用户名密码
- RSA文件
8.3.4、Branches to build
- 构建的分支。
- */master表示master分支,也可以设置为其他分支。
8.3.5、源码浏览器
- 你所使用的代码仓库管理工具,如github, gitlab.
8.4、构建任务的触发器
不操作
8.4.1、触发远程构建(使用脚本)
该选项会提供一个接口,可以用来在代码层面触发构建。
8.4.2、其他工程构建后触发
在其他工程构建后构建
8.4.3、定时构建
- 每隔一段时间进行构建
- 日程表类似linux crontab书写格式。 列如
- 每隔30分钟进行一次构建:H/30 * * * * *
8.4.4、GitHub hook trigger for GITScm polling
当有更改push到gitlab代码仓库,即触发构建。
8.4.5、轮询 SCM
- 该选项是配合 2.3.4 使用的。
- 当代码仓库发生改动,jenkins并不知道。需要配置这个选项,周期性的去检查代码仓库是否发生改动
8.5、添加maven构建
clean
package
/var/jenkins_home/workspace/hello_world_docker/demo1/pom.xml
8.6、增加构建执行shell
#!/bin/bash
# 服务名称
server_name=demo1
port=8888
# 项目目录
project_dir=./$server_name
# 拷贝jar到docker目录
cp $project_dir/target/*.jar $project_dir/docker
# 进入docker目录
cd $project_dir/docker/
# 修改jar权限
chmod 755 *.jar
echo "看看docker版本"
docker -v
# 获取容器名称
temp_server_name=`docker ps -a | grep $server_name | awk '{print $2}'`
# 如果容器存在
if test $temp_server_name = $server_name
then
echo "容器--->>$server_name:停止,删除"
docker stop $server_name
docker rm $server_name
echo "镜像--->>$server_name:删除"
docker rmi $server_name
fi
echo "打包镜像--->>:$server_name"
docker build -t $server_name .
echo "运行镜像--->>:$server_name"
docker run -d -p $port:$port --name $server_name $server_name
9、测试
9.1、查看镜像
docker images
9.2、查看容器
docker ps | grep demo1
9.3、测试应用
http://192.168.187.171:8888/say/hello