Skip to content

Jenkins

jenkins+docker自动化部署

中文文档地址 https://www.jenkins.io/zh/doc/

使用docker安装jenkins, 这里使用9000端口外放, 截止2024/7/18 这个镜像版本比较低(jdk11), 所以会遇到一些问题。 国外直接用jenkins/jenkins:lts-jdk17镜像减少麻烦 点击这里跳转说明

sh
docker run -dit --name=jenkins --restart=always -p 9000:8080 -p 50000:50000 -m 2g -u root -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -v /etc/localtime:/etc/localtime jenkins/jenkins:lts

安装好使用下面的命令查看jenkins初始登录密码(在启动的日志有打印, 或者可以去容器里看)

sh
docker logs jenkins

docker exec -it jenkins sh -c "cat /var/jenkins_home/secrets/initialAdminPassword"

登录http://ip:port进入jenkins管理页面 第一次进去点击下载推荐插件, 但是下载大概率失败, 不管失败选择继续(可以直接F5刷新直接继续, 不用等)。原因:版本过低。

在Manage Jenkins(管理页)下滑会看见提示最新的版本, 升级到2.452.3, 这个版本是 jdk11 的。注意: 更新后再次进入还是会提示更新, 那个版本是jdk17的不能直接升级。

进入并等待

因为网络原因, 需要将插件源设置为国内的, 这样才可以安装插件。将 url 内容修改为 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json(清华大学官方镜像)并重启容器。

sh
# 替换https地址并重启
docker exec -it jenkins sh -c "sed -i 's|https://updates.jenkins.io/update-center.json|https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json|g' /var/jenkins_home/hudson.model.UpdateCenter.xml" && docker restart jenkins

# 查看修改好的配置
docker exec -it jenkins sh -c "cat /var/jenkins_home/hudson.model.UpdateCenter.xml"

配置好国内插件源, 重启后, 再次在浏览器中访问jenkins插件管理, 选择更新(因为第一次进入选择了推荐插件, 所以之前失败的都会提示需要更新) 手动下载插件Maven Integration

构建jenkins任务

安装jdk17

安装jdk17(如果项目是jdk11及以下或者下载的是jdk17版本的jenkins跳过这一步) jdk17

sh
# 更新包管理器并安装 wget 和 tar
apt-get update -y && apt-get install -y wget tar

# 下载 Oracle JDK 17 压缩包
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz

# 创建一个目录来解压 JDK
mkdir -p /home/java

# 解压缩 JDK 压缩包到指定目录
tar -xzf jdk-17_linux-x64_bin.tar.gz -C /home/java

配置jdk和Maven

系统管理 -> 全局工具配置(Tools)

配置上一步解压好的jdk地址 (/home/java/文件名)

配置maven, 最好和项目打包的版本一致

新建jenkins任务

新建jenkins任务(new job), 构建maven项目 主要有两个地方必需要配置, 也可以去配置触发器(手动, 定时, 定时比较, 接收git推送, http请求时) (1) git仓库地址(可以指定分支)和验证方式, 可以使用简单的账号密码, 也可以使用ssh-keygen生成秘钥

(2) maven打包逻辑

shell脚本

sh
# jenkins默认工作目录 /var/jenkins_home/workspace/   我建的jenkins任务名 myJob
cd /var/jenkins_home/workspace/myJob

# 先删除旧的
docker stop -f switotor || true
docker rm switotor || true
docker rmi switotor || true

# 因为我的项目下载下来Dockerfile不在根目录
cd switolor-application/switolor-admin

# 使用当前目录的Dockerfile构建镜像名为switolor
docker build -t switolor .

# 运行docker
docker run --name switotor --restart=always -p 9081:8080 switotor:latest

PS: 如果是集群环境可以如下配置

sh
# 设置本地和远程的工作目录
LOCAL_WORKSPACE="/var/jenkins_home/workspace/myJob"
REMOTE_WORKSPACE="/data/java"

# 定义要执行的命令
COMMANDS=$(cat <<'END_COMMANDS'
cd $WORKSPACE
docker stop switotor || true
docker rm switotor || true
docker rmi switotor || true
cd switolor-application/switolor-admin
docker build -t switotor .
docker run --name switotor --restart=always -p 9081:8080 switotor:latest
END_COMMANDS
)

# 在本地执行命令
echo "Executing on local machine..."
WORKSPACE=$LOCAL_WORKSPACE
eval "$COMMANDS"



# 远程服务器信息
REMOTE_SERVER="远程服务器ip地址"
REMOTE_USER="帐号/root"
REMOTE_PASSWORD="密码"

# 将本地文件复制到远程服务器
echo "Copying files to remote server $REMOTE_SERVER..."
sshpass -p $REMOTE_PASSWORD scp -r $LOCAL_WORKSPACE/* $REMOTE_USER@$REMOTE_SERVER:$REMOTE_WORKSPACE/

# 在远程服务器执行命令
echo "Executing on remote server $REMOTE_SERVER..."
sshpass -p $REMOTE_PASSWORD ssh $REMOTE_USER@$REMOTE_SERVER "WORKSPACE=$REMOTE_WORKSPACE; $COMMANDS"

# 如果还有服务器改下IP执行scp和ssh command即可
......

点击应用、保存

运行日志

可以点击手动构建运行一次, 第一次要下载包比较慢

Idea插件使用docker快速部署Java程序

依赖IntelliJ IDEA 的 Docker 插件支持, 几年前的版本就默认支持 在项目中创建Dockerfile配置文件

yml
# jdk17
FROM openjdk:17.0.2-oraclelinux8
MAINTAINER hjh

# 创建所需的目录
RUN mkdir -p /ruoyi/server/logs \
/ruoyi/server/temp \
/ruoyi/skywalking/agent

WORKDIR /ruoyi/server

# 设置环境变量
ENV SERVER_PORT=8080 TZ=Asia/Shanghai
# 暴露的端口
EXPOSE ${SERVER_PORT}

# 添加打包后的 jar 包到指定位置
ADD ./target/switolor-admin.jar ./switolor.jar
# 还可以添加比如证书这些需要依赖配置文件到指定目录, 写法一致

ENTRYPOINT ["java", \
"-Djava.security.egd=file:/dev/./urandom", \
"-Dserver.port=${SERVER_PORT}", \

# 内存溢出时日志
"-XX:+HeapDumpOnOutOfMemoryError", \
"-XX:HeapDumpPath=/ruoyi/server/logs", \
"-XX:OnOutOfMemoryError=\"jstack -l %p > /ruoyi/server/logs/oom_thread_dump.txt\"", \

# 应用名称 如果想区分集群节点监控 改成不同的名称即可
# "-Dskywalking.agent.service_name=switolor", \
# "-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar", \
"-jar", "-Xms1g", "-Xmx2g", "switolor.jar"]

配置环境

执行

粤ICP备20009776号