jenkins中的maven jdk 钩子配置
打包时候把每个子项目打成 jar 包,然后通过 Dockerfile 生产 docker 镜像,然后启动镜像生成容器
项目根目录下新增 Jenkinsfile
pipeline {
agent any
stages {
stage('package') {
agent {
docker {
image 'maven'
args '-v /root/.m2:/root/.m2 -v /data/maven/apache-maven-3.6.0/conf/settings.xml:/root/.m2/settings.xml --entrypoint='
}
}
steps {
script{
echo "WORKSPACE:${env.WORKSPACE}"
echo "Branch:${env.NODE_NAME}"
if ("${env.NODE_NAME}" == "master") {
sh "sh package.sh"
}
}
}
}
stage('build') {
agent none
steps {
script{
echo "WORKSPACE:${env.WORKSPACE}"
echo "Branch:${env.NODE_NAME}"
if ("${env.NODE_NAME}" == "master") {
sh "sh build.sh"
}
}
}
}
}
}
# maven 用于 Jenkins 构建有 maven 环境的容器
docker pull maven
# jdk8 的镜像用于 Dockerfile 中设置构建拥有 jdk8 环境镜像的基础镜像
docker pull jdk8
- image 'http://docker.io/maven':基于这个镜像生成容器部署,所以环境有 maven 环境
- args 中 -v /root/.m2:/root/.m2:把依赖挂载导服务器上,不用每次打包都下依赖
- args 中 -v /data/maven/apache-maven-3.8.0/conf/settings.xml:/root/.m2/settings.xml
- --entrypoint=:配置下好像就不会打开进入容器了,没深入研究
- ${env.WORKSPACE}:工作空间路径
- ${env.NODE_NAME}:进行的分支
package.sh
#!/bin/sh
#项目打包
mvn clean install package '-Dmaven.test.skip=true'
build.sh
#!/bin/sh
#启用 prod 配置
ActiveProfiles=prod
#基本信息需要配置
#内部端口
targetPort=8082
#旧镜像版本号
oldVendor=2.0.0
#镜像版本号
vendor=2.0.0
#项目名
projectName=meng
#进入target文件夹
#直接的构建是在容器里,这个是在 Jenkins 容器里,所以空间不一样
#容器的空间是原空间路径后面多了 @2
cd $WORKSPACE@2/$projectName/target
#创建Dockerfile文件
#-jar -Duser.timezone=GMT+08 保证生成出来的容器的时区与服务器一致
cat << EOF > Dockerfile
FROM kdvolder/jdk8
MAINTAINER $projectName
VOLUME /tmp
LABEL app="$projectName" version="$vendor" by="$projectName"
COPY $projectName.jar $projectName.jar
EXPOSE $targetPort
CMD -Xmx100m -Xms100m -jar -Duser.timezone=GMT+08 $projectName.jar --spring.profiles.active=$ActiveProfiles
ENTRYPOINT java
EOF
#删除镜像下所有容器
docker rm -f $(docker ps -a | grep "$projectName" | awk '{print $1}')
#删除旧镜像
docker rmi -f $projectName:$oldVendor
#创建镜像
docker build -t $projectName:$vendor .
#启动镜像生成容器
docker run --name $projectName -d -p $targetPort:$targetPort $projectName:$vendor