Jenkins + docker部署项目

1 篇文章 0 订阅
1 篇文章 0 订阅

安装Jenkins

输入命令启动Jenkins容器

docker run -d --restart=always --name jenkins  -u root -p 8080:8080 -p 50000:50000   jenkinsci/blueocean

由于是后台启动的,需要输入docker logs jenkins打开日志来获取密码

挂载-v /home/jenkins_data:/var/jenkins_home -v$(whichdocker):/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock

配置Jenkins

因为已经配置过了这里就不再截图,可以参考别的教程

  1. 安装插件:输入ip:8080进入Jenkins,选择推荐安装的插件
  2. 创建用户:安装完成之后会提示创建一个用户,这里我选择继续用admin登录,密码还是之前的那个密码忘记了可以继续执行docker logs jenkins查看日志获取密码
  3. 设置时区:进入系统管理 -> 脚本命令行,执行System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone','Asia/Shanghai')
  4. 安装插件:只安装推荐插件还不太够,需要继续下载几个插件没
    1. Maven Integration
    2. Maven Info
    3. Publish Over SSH
    4. Extended Choice Parameter
    5. Git Parameter
  1. jdk配置:这里我没浪费太多时间,直接去官网下载的jdk然后扔到docker里,感兴趣的可以研究一下
  2. maven配置:直接用默认的
  3. ssh配置:系统管理 -> 系统配置 -> ssh server 按照下图这么配置就行

开始部署

配置任务

先选择构建maven项目

详细配置

不用管的配置

源码管理

选择git账号并指定分支,没有就添加

打包管理

指定打包命令,这里打包的时候跳过测试clean package -Dmaven.test.skip=true

构建后操作

点击新增构建后操作

会弹出以下界面

  1. 这里是服务器,就是配置Jenkins第七步做的
  2. 打的jar路径,和idea打包路径一样。如果路径还是不对可以先运行一下去工作空间看一下
  1. 传输文件,去除前缀,文件名为*.jar
  2. 传输到服务器的路径
  3. 传输完后执行的shell命令
cd /work/java/private-mall-docker/shell && ./backup.sh
cd /work/java/private-mall-docker
docker build -t private-mall .
cd /work/java/private-mall-docker/shell && ./deploy.sh

创建脚本文件

创建文件夹

先创建项目文件夹,在项目文件夹下面创建这几个文件夹

  1. backup
  2. build
  3. logs
  4. shell
创建backip.sh脚本
#!/bin/bash
set -e

# 基础路径
BASE_PATH=/work/java/private-mall-docker
# 编译后 jar 的地址。部署时,Jenkins 会上传 jar 包到该目录下
SOURCE_PATH=$BASE_PATH/build
# 服务名称。同时约定部署服务的 jar 包名字也为它。
SERVER_NAME=yudao-server
# 环境
PROFILES_ACTIVE=dev

# 备份
function backup() {
    # 如果不存在,则无需备份
    if [ ! -f "$BASE_PATH/$SERVER_NAME.jar" ]; then
        echo "[backup] $BASE_PATH/$SERVER_NAME.jar 不存在,跳过备份"
    # 如果存在,则备份到 backup 目录下,使用时间作为后缀
    else
        echo "[backup] 开始备份 $SERVER_NAME ..."
        cp $BASE_PATH/$SERVER_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jar
        echo "[backup] 备份 $SERVER_NAME 完成"
    fi
}

# 最新构建代码 移动到项目环境
function transfer() {
    echo "[transfer] 开始转移 $SERVER_NAME.jar"

    # 删除原 jar 包
    if [ ! -f "$BASE_PATH/$SERVER_NAME.jar" ]; then
        echo "[transfer] $BASE_PATH/$SERVER_NAME.jar 不存在,跳过删除"
    else
        echo "[transfer] 移除 $BASE_PATH/$SERVER_NAME.jar 完成"
        rm $BASE_PATH/$SERVER_NAME.jar
    fi

    # 复制新 jar 包
    echo "[transfer] 从 $SOURCE_PATH 中获取 $SERVER_NAME.jar 并迁移至 $BASE_PATH ...."
    cp $SOURCE_PATH/$SERVER_NAME.jar $BASE_PATH

    echo "[transfer] 转移 $SERVER_NAME.jar 完成"
}

function build() {

    echo "开始构建镜像"
    cd /work/java/private-mall-docker
    docker build -t private-mall .
    echo "镜像构建完成"
}


# 部署
function deploy() {
    DATE=$(date +%Y%m%d%H%M)
    cd $BASE_PATH
    # 备份原 jar
    backup
    # 部署新 jar
    transfer
}

deploy

创建deploy.sh脚本
#!/bin/bash
set -e

## 第一步:删除可能启动的老 private-mall 容器
echo "开始删除 private-mall 容器"
docker stop private-mall || true
docker rm private-mall || true
echo "完成删除 private-mall 容器"

## 第二步:启动新的 private-mall 容器 \
echo "开始启动 private-mall 容器"
docker run -d \
--name private-mall \
-p 28080:28080 \
-e "SPRING_PROFILES_ACTIVE=local" \
-v /work/java/private-mall-docker/logs:/root/logs/ \
private-mall
echo "正在启动 private-mall 容器中,需要等待 60 秒左右"

这里注意-e "SPRING_PROFILES_ACTIVE=local"自己玩的时候设置的local,等部署的时候自己在设置yaml文件

创建Dockerfile文件
FROM eclipse-temurin:8-jre

## 创建目录,并使用它作为工作目录
RUN mkdir -p /private-mall
WORKDIR /private-mall
## 将后端项目的 Jar 文件,复制到镜像中
COPY ./yudao-server.jar app.jar

## 设置 TZ 时区
ENV TZ=Asia/Shanghai
## 设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖
ENV JAVA_OPTS="-Xms512m -Xmx512m -Djava.security.egd=file:/dev/./urandom"

## 应用参数
ENV ARGS=""

## 暴露后端项目的 28080 端口
EXPOSE 28080

## 启动后端项目
CMD java ${JAVA_OPTS} -jar app.jar $ARGS

清理镜像

手动输入docker system prune -a清理没有使用的镜像,考虑到不会部署不会太频繁就不写到脚本中去了

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Jenkins是一个开源的自动化部署工具,它可以帮助我们实现持续集成和自动化部署。而Docker是一种虚拟化技术,可以将应用程序及其依赖打包成一个可移植的容器,实现快速部署和可靠性。 在使用Jenkins进行自动化部署时,可以搭配使用Docker和Maven来创建一个完整的自动部署环境。首先,我们需要在Jenkins服务器上安装Docker,然后使用Docker创建一个虚拟容器容器中包含了我们的项目代码和相关的环境依赖。 接下来,我们可以使用Maven来管理和构建我们的项目。在Jenkins上配置好Maven构建任务后,每当代码有更新或提交时,Jenkins会自动触发构建任务。在构建任务中,Jenkins会从代码仓库中拉取最新的代码,并使用Maven进行编译、测试、打包等操作。 当构建成功后,Jenkins可以将构建好的应用程序打包成一个Docker镜像,然后将镜像推送到Docker仓库。我们可以使用Docker的相关命令将该镜像部署到服务器上,即可实现自动化部署。在部署过程中,Docker会自动解析容器中的依赖,并创建一个虚拟环境来运行我们的应用程序。 通过使用JenkinsDocker和Maven,我们可以实现一个完整的自动化部署环境。这样一来,我们只需要在代码有更新时提交到代码仓库,Jenkins就会自动触发构建任务,并将构建好的应用程序部署到服务器上。这大大提高了部署效率,减少了人工操作的错误和风险,同时也提高了系统的可靠性和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ming__GoGo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值