技术工具类:通过Jekins部署Docker服务

1、在工程 pom.xml中添加docker编译插件

<!-- docker-maven 插件,用于打包docker镜像 -->
<plugin>
	<groupId>com.spotify</groupId>
	<artifactId>docker-maven-plugin</artifactId>
	<version>${docker-maven-plugin.version}</version>
	<configuration>
	    <!--镜像名称-->
	    <imageName>${project.artifactId}</imageName>
	    <!-- dockerfile目录-->
	    <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
	    <resources>
		<resource>
		    <targetPath>/</targetPath>
		    <directory>${project.build.directory}</directory>
		    <include>${project.build.finalName}.jar</include>
		</resource>
	    </resources>
	    <buildArgs>
		<JAR_FILE>${project.artifactId}.jar</JAR_FILE>
	    </buildArgs>
	</configuration>
</plugin>

2、在工程 src/main/docker下创建DockerFile

FROM openjdk:8u222-jre-stretch
VOLUME /tmp
RUN groupadd -g 2046 fuli && useradd  -d /home/fuli -m -u 2046 -g fuli fuli \
    && mkdir /data \
    && mkdir /app \
    && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo 'Asia/Shanghai' >/etc/timezone
ARG JAR_FILE
ADD ${JAR_FILE} /app/app.jar
WORKDIR /app
RUN chmod 777 /app
RUN chmod 777 /data
USER 2046
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app/app.jar" ]

3、Jekins 配置

需要注意的点:

构建时先要打包编译父pom工程,如下:

再编译具体工程,如下:

3.1 添加 Excute Shell 打包并上传镜像

# 镜像打包,发布到远程仓库
#!/bin/bash
# 镜像名称
old_image=admin-test
#环境标识,联调环境:dev,测试环境:test,演示环境:beta,生产环境:prod 
env_label="test"
tag=$(date "+%Y%m%d")"-"$env_label
# 镜像仓库地址、帐号、密码
registry_addr=172.1.1.1
registry_uname=admin
registry_paw=admin
# docker仓库里创建的项目名
registry_project_name=group

new_image=$registry_addr/$registry_project_name/$old_image:$tag

# 给镜像打标签 
docker tag $old_image $new_image

# 登录镜像仓库
docker login --username=$registry_uname --password=$registry_paw $registry_addr

# push image
docker push $new_image

# 删除 latest 镜像 
docker rmi $old_image

3.2 添加 Execute shell script on remote host using ssh 拉取镜像并执行启动

#!/bin/bash
#宿主机ip
client_ip=172.1.1.8
# 镜像仓库地址、帐号、密码
registry_addr=172.1.1.1
registry_uname=admin
registry_paw=admin
#环境标识,联调环境:dev,测试环境:test,演示环境:beta,生产环境:prod 
env_label="dev"
tag=$(date "+%Y%m%d")"-"$env_label
# 项目名称,对应pom.xml里的项目名称
project_name="test"
# docker仓库里创建的项目名
registry_project_name=group

# 镜像名称
img_name=$registry_addr/$registry_project_name/$project_name:$tag

echo "$img_name"

# 查看进程是否存在,停止容器
exist=`docker inspect --format '{{.State.Running}}' ${project_name}`
if [ "${exist}" == "true" ]; then
	docker stop ${project_name}
	#记录日志
	echo "停止容器,容器名称:${project_name}" 
fi
# 删除容器
for i in [ `docker ps -a --format "{{.Names}}"` ]; do
	if [[ $i == ${project_name} ]]; then
		echo "删除容器${project_name} "
		
		docker rm $i
		break
	fi
done
img_name_t=$registry_addr/$registry_project_name/$project_name
# 删除镜像
for i in [ `docker images | grep -w $img_name_t  | awk '{print $1}' ` ]; do
	if [[ $i == ${img_name_t} ]]; then
		echo "删除镜像${img_name_t}"
		#删除镜像
		docker rmi -f $i
		break
	fi
done

# 登录阿里云镜像仓库
docker login --username=$registry_uname --password=$registry_paw $registry_addr
# 拉取镜像
docker pull $img_name

# 删除空镜像
docker rmi $(docker images | grep "none" | awk '{print $3}')

# 运行 
docker run --name=$project_name --restart=always -m 1G -d -t \
-p 7002:7002 \
-e  "SPRING_PROFILES_ACTIVE=${env_label}" \
-e  "SPRING_CLOUD_SENTINEL_TRANSPORT_CLIENTIP=${client_ip}" \
-e  "SPRING_CLOUD_NACOS_DISCOVERY_IP=${client_ip}" \
$img_name

上面的关键步骤已有;

完整的如下图,仅供参考:

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值