使用Jenkins+Docker部署SpringBoot项目
2022-08-18 本文已影响0人
芼芼567
一、安装Jenkins
默认docker已安装
- 首先创建挂载文件夹,并赋予文件夹权限
mkdir -p /home/jenkins_home
chmod 777 /home/jenkins_home
- 安装Jenkins
docker run -dit --restart always --name jenkins -u root -p 8686:8080 -p 50000:50000 \
-v /home/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /etc/localtime:/etc/localtime -v $(which docker):/bin/docker \
jenkins/jenkins:lts-jdk11
二、初始化Jenkins
网页访问 http://{服务器IP}:8686,按照提示进行
密码可在/home/jenkins_home/secrets/initialAdminPassword中找到
选择安装推荐的插件即可
等待插件安装完成
创建管理员账户
如果是部署在云服务器上的话此处可能需要更改成公网访问地址
点击【保存并完成】后初始化工作结束
三、安装必要插件
因为需要部署SpringBoot项目,所以要额外安装Maven插件
按以上步骤完成Maven插件安装,然后配置下Maven
主要是修改下maven仓库,官方仓库实在太慢,建议用阿里云的,setting.xml文件如下
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>mirror</id>
<mirrorOf>central,jcenter,!rdc-releases,!rdc-snapshots</mirrorOf>
<name>mirror</name>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
</settings>
选择Maven版本
以同样的方式安装svn插件(我们公司用的还是Subversion, 比较low,如果用git的话则不需要,因为默认已安装好了)
四、创建任务
以下是关键设置
源码管理
触发器
根据需要选择,这边测试打算手动运行,所以一个都没有勾选
Maven构建
打包docker运行
具体shell如下:
name="test"
cd /var/jenkins_home/workspace/$name
cp ./target/$name.jar $name.jar
docker stop $name || true
docker rm test || true
docker rmi $name || true
docker build -t $name --build-arg JAR_FILE=$name.jar .
docker run -dit --restart always --name tmip -p 8181:8080 -v /home/logs:/logs -e JAVA_OPTS="-Xms128m -Xmx256m -Dspring.profiles.active=dev" $name
需要注意的是Dockerfile文件需要放在项目根目录下。Dockerfile内容如下:
# FROM: 第一条指令必须是FROM指令 (环境依赖 jdk 版本等)
# VOLUME: 作用是创建在本地主机或其他容器可以挂载的数据卷,用来存放数据。
# ARG: 定义一个变量
# JAR_FILE: 为pom文件中项目定义的路径地址
# COPY: 复制本地主机src目录或文件到容器的desc目录,desc不存在时会自动创建。
FROM openjdk:8-jdk-alpine
VOLUME /logs
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
# EXPOSE
# 格式为 EXPOSE <port> [<port>...]。
# 告诉 Docker 服务端容器暴露的端口号,供互联系统使用。在启动容器时需要通过 -P,Docker 主机会自动分配一个端口转发到指定的端口
EXPOSE 8080
# ENV
# 格式为 ENV <key> <value>。 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。
# 例如
# ENV PG_MAJOR 9.3
# ENV PG_VERSION 9.3.4
# RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …
# ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH
ENV JAVA_OPTS "-Xms128m -Xmx256m"
# ENV PROFILE "dev"
# CMD
# 支持三种格式
# CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;
# CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;
# CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;
# 指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。
# 如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。
# CMD ["java","${JAVA_OPTS}","-jar","/app.jar"]
# ENTRYPOINT
# 两种格式:
# ENTRYPOINT ["executable", "param1", "param2"]
# ENTRYPOINT command param1 param2(shell中执行)。
# 配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。
# 每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。
ENTRYPOINT java -XX:ErrorFile=./logs/hs_err_pid%p.log -Xloggc:./logs/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Djava.security.egd=file:/dev/./urandom -Duser.timezone=GMT+08 ${JAVA_OPTS} -jar /app.jar
点击立即构建
可以查看控制台输出,第一次构建比较慢,请耐心等待
搞定