jenkins自动构建maven项目

参考资料
手把手教你使用 Jenkins+Docker+Tomcat 自动化部署项目(2022最新)
Gitee令牌
Docker+Jenkins+Gitee自动化部署maven项目_docker运行maven_fkjavaer的博客-CSDN博客
安装maven教程 | 3.9.3版本maven下载

# 使用docker官方镜像拉取
docker search jenkins/jenkins

docker pull jenkins/jenkins

mkdir -p /root/docker-jenkins/home

# 映射本地数据卷时,docker-jenkins目录的拥有者变成了root用户,会出现Permission denied 的问题,无法启动
# 当前目录的拥有者赋值给uid 1000
# https://www.cnblogs.com/jackluo/p/5783116.html
chown -R 1000 /root/docker-jenkins/

docker run -d \
-p 5200:8080 \
-p 50000:50000 \
--restart=always \
-m 2g \
-uroot \
-v /root/docker-jenkins/home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
--name jenkins \
jenkins/jenkins

docker logs -f jenkins

或在jenkins直接安装(没试过),或在宿主机安装使用数据卷挂载过去

# 如果前面指定root运行,则无需再次指定
# 进入容器
docker exec -u 0 -it jenkins /bin/bash

不进入容器,在宿主机操作一套带走

# 宿主机上执行(二选一,推荐)
docker exec jenkins mkdir -p /usr/local/maven /usr/local/maven/repository
# 容器内执行(二选一)
mkdir -p /usr/local/maven && mkdir -p /usr/local/maven/repository

报错: (No such file or directory) and ‘parent.relativePath’ points at no local POM

docker exec jenkins chmod -R o+r+w /usr/local/maven && docker exec jenkins chmod o+x+w /usr/local/maven

将宿主机的maven安装包拷贝到容器内(也可使用数据卷挂载)

find / -name apache-maven*.tar.gz | xargs -I {} docker cp {} jenkins:/usr/local/maven
docker exec jenkins /bin/bash -c 'cd /usr/local/maven && tar -zxvf $(find / -name apache-maven*.tar.gz)'

mave 仓库配置

vim ~/settings.xml
<?xml version="1.0" encoding="UTF-8"?>
 
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">

	<!-- 注意仓库地址repository与上面的目录对应 -->
  <localRepository>/usr/local/maven/repository</localRepository>
  
  <pluginGroups>
  </pluginGroups>
 
  <proxies>    
  </proxies>
 
  <servers>
  </servers>
 
  <mirrors>
    <mirror>  
   	  <id>alimaven</id>  
   	  <name>aliyun maven</name>  
	    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
   	  <mirrorOf>central</mirrorOf>          
    </mirror> 
  </mirrors>
 
  <profiles>
  </profiles>
</settings>

将宿主机修改的settings.xml拷贝至容器内(这里我放在了宿主机/root下)

docker cp /root/settings.xml jenkins:/usr/local/maven/apache-maven-3.9.3/conf

提示Permission denied,进入容器切换root用户sudo -i或以root身份进入容器docker exec -u 0 xxx

clean package -Dmaven.test.skip=true
bash /var/jenkins_home/workspace/${JOB_NAME}/deploy.sh ${JOB_NAME} master

image.png
image.png
deploy.sh

#!/bin/bash

SERVER_NAME=$1
IMAGE_TAG=$2
IMAGE_NAME=$SERVER_NAME:$IMAGE_TAG
SERVER_PORT=$(find . -type d -name "target" -prune -o -type f -name "application.yml" -exec grep -A1 "server:" {} \; | awk '/port:/ {print $2}')

echo "------ 开始构建镜像:${SERVER_NAME} ------"
docker build -t ${IMAGE_NAME} .
echo -e "------ 镜像构建结束 | 镜像名:${IMAGE_NAME} ------\n"

if [[ -n $(docker ps -q -f "name=^${SERVER_NAME}$") ]];then
    echo "------ 容器正在运行:${SERVER_NAME} ------"
    echo "------ 停止容器:$SERVER_NAME ------"
    docker stop $SERVER_NAME
    echo "------ 删除容器:$SERVER_NAME ------"
    docker rm $SERVER_NAME
else
    echo "------ 容器未在运行:${SERVER_NAME} ------"
    echo "------ 删除容器:$SERVER_NAME ------"
    docker rm $SERVER_NAME
fi

echo "------ 开始运行容器:$SERVER_NAME ------"
# 这里宿主机端口及容器端口保持一致
docker run -d --name $SERVER_NAME -p $SERVER_PORT:$SERVER_PORT ${IMAGE_NAME}
echo -e "------ 容器:$SERVER_NAME 运行成功!------"

echo "------ 清理虚悬镜像 ------"
if [[ -n $(docker images | grep "none" | awk '{print $3}') ]];then
    docker rmi -f $(docker images | grep "none" | awk '{print $3}')
fi

Dockerfile

FROM openjdk:8-jre as builder
WORKDIR apps
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} application.jar
RUN java -Djarmode=layertools -jar application.jar extract

# -------------------------------------------------------------

FROM openjdk:8-jre
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
WORKDIR apps
COPY --from=builder apps/dependencies/ ./
COPY --from=builder apps/spring-boot-loader/ ./
COPY --from=builder apps/snapshot-dependencies/ ./
COPY --from=builder apps/application/ ./
ENTRYPOINT java ${JAVA_OPTS} org.springframework.boot.loader.JarLauncher

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值