继上篇文章中jenkins+gitlab+Harbor实现容器自动化部署后,现在加一个maven,实现jenkins先从gitlab(GitHub)上拉取代码,然后拉取代码后,在jenkins服务器上将代码打包为jar包,然后在生成docker镜像,上传镜像到私库,从远程机器上拉取docker镜像,运行docker镜像,这里比上一篇中多了一步打包的过程。
这就是为什么上篇帖文中需要安装的maven没有用到的原因。
参照前文安装完maven后,需要与开发人员将中央仓库(settings.xml、pom.xml)的地址统一,否则会出现打包失败的情况。
在完成maven的中央仓库统一后将excute shell进行简单修改如下:
#!bin/bash
# Jenkins机器:编译完成后,build生成一个新版本的镜像,push到远程docker仓库
# Variables
WORKSAPCE=/root/.jenkins/workspace/eladmin-system
DIR=/home/code
JAR_HOME=/home/code/me/zhengjie/eladmin-system/2.6
DOCKERFILE_HOME=/root/jenkins/eladmin/eladmin-system
HARBOR_IP=192.168.6.3
REPOSITORIES=jenkins/eladmin-system
HARBOR_USER=admin
HARBOR_USER_PASSWD=fymj@2021DK
HARBOR_USER_EMAIL=gaohuazheng@sc-model.cn
a=`ls $DIR|wc -l`
echo $a
if [ $a -gt 0 ]
then
rm -rf $DIR/*
fi
mvn clean install
# Copy project and making jar
cp -r $WORKSAPCE $DIR
cd $DIR/eladmin-system
mvn clean install
# Copy the newest jar to docker-file directory.
\cp -f ${JAR_HOME}/*jar ${DOCKERFILE_HOME}/
# Delete image early version.
sudo docker login -u ${HARBOR_USER} -p ${HARBOR_USER_PASSWD} ${HARBOR_IP}
IMAGE_ID=`sudo docker images | grep ${REPOSITORIES} | awk '{print $3}'`
if [ -n "${IMAGE_ID}" ];then
sudo docker rmi -f ${IMAGE_ID}
fi
# Build image.
cd ${DOCKERFILE_HOME}
TAG=`date +%Y%m%d`
sudo docker build -t ${HARBOR_IP}/$REPOSITORIES:${TAG} . &>/dev/null
# Push to the harbor registry.
sudo docker push ${HARBOR_IP}/$REPOSITORIES:${TAG} &>/dev/null
这里多了一步:
a=`ls $DIR|wc -l`
echo $a
if [ $a -gt 0 ]
then
rm -rf $DIR/*
fi
mvn clean install
# Copy project and making jar
cp -r $WORKSAPCE $DIR
cd $DIR/eladmin-system
mvn clean install
# Copy the newest jar to docker-file directory.
\cp -f ${JAR_HOME}/*jar ${DOCKERFILE_HOME}/
意思是查看构建项目复制的目录是否有文件,如果有则删除,删除完成后将项目打包为jar包,jar包打包完成后将jar包复制到dockerfile目录下在进行相应的操作。