1.宿主机创建jenkinstest目录把maven包拷贝到宿主机上
注意这里的maven里面是maven文件夹,为之后拷贝到容器中用 copy功能只会把当前目录下的文件复制过去 当前目录不会一起复制
编辑Dockerfile文件
from jenkins/jenkins
COPY maven /opt/
COPY settings.xml /opt/apache-maven-3.5.2/conf/
ENV PATH /opt/apache-maven-3.5.2/bin:$PATH
这里注意COPY的参数设置写法
修改settings的仓库配置内容 并一起放到jenkinstest目录下,
这里的仓库地址配置和jenkins挂载地址一致,这样可以少配置一个挂载目录,也可以改成其他位置,在启动容器时映射这个目录
<localRepository>/var/jenkins_home/repository</localRepository>
确保maven,setting.xml 、Dockerfile三个文件或者文件夹在同一个目录下后执行
docker build -t jenkins-maven:chijs .
运行容器
8081端口是应用的端口也要映射
docker run -d -p 10240:8080 -p 10241:50000 -p 8081:8081 -v /var/jenkins_mount:/var/jenkins_home -v /etc/localtime:/etc/localtime --name chijsjenkins jenkins-maven:chijs
注意jenkins目录权限问题 看这个文章
Docker 快速安装Jenkins完美教程 (亲测采坑后详细步骤) - 爱码网
基于docker运行的jenkins并配置maven - it610.comp
jenkins中配置
进入容器发现有权限问题
这边点到console output 看到日志也报错了
查了下跟权限的用户组有关
jenkins的权限用户id是1000 而 宿主机的权限用户id是0
因为是复制到容器的方式 所以会把权限id一起带过去 需要修改下文件的权限
用root用户登录jenkins
docker exec -u root -it 3b4e2465b61d /bin/bash
进入容器的maven bin目录 执行
chmod +x mvn
发现jenkins启动后还是报错
-x 打debug信息出来查看
跟项目的一个properties文件有关
发现这个文件是GBK编码
系统部署是用utf-8格式解析文件
所以中文就会报错
解决方法 1 直接把配置文件改成utf-8格式
2.把中文转换下
用jdk下的工具
到这里只是构建完成
构建命令改成
-e -N -DskipTests -Dmaven.test.skip=true clean package
到这里只是构建项目 还得运行项目 要用到shell命令
DEOMO_PATH=/var/jenkins_home/workspace/test/target/demo-0.0.1-SNAPSHOT
chmod 755 $DEOMO_PATH.jar
nohup java -jar $DEOMO_PATH.jar &
&符号是后台执行
执行脚本参考文章
基于Docker+Jenkins实现自动化部署 - 明天,你好啊 - 博客园
发现还有报错
解决办法
jekins的全局配置中加入环境变量
BUILD_ID dontKillMe
参考文章jenkins Process leaked file descriptors_yueguanyun的专栏-CSDN博客
配置完可能需要重启jenkins 执行 jenkins地址/restart
最后构建成功
运行项目 这里8081端口是宿主机端口