• Jenkins--部署--01--打包Maven项目为Docker镜像并运行


    Jenkins–部署–01–打包Maven项目为Docker镜像并运行


    1、介绍

    通过git上传代码—>使用Jenkins构建自动打包—>把jar包打成docker镜像,运行在docker中

    2、linux安装jdk和maven

    2.1、安装jdk11

    https://blog.csdn.net/zhou920786312/article/details/76473912
    
    • 1

    2.2、安装maven(建议)

    https://blog.csdn.net/zhou920786312/article/details/125832759
    
    • 1

    3、Docker安装Jenkins

    参考

    Jenkins--基础--02--安装
    	Docker安装Jenkins(这是我部署的)
    
    • 1
    • 2

    4、配置加速器

    # 国内的插件仓库地址
    http://mirror.xmission.com/jenkins/updates/current/update-center.json
    
    
    • 1
    • 2
    • 3

    5、配置ssh

    目的是为了在linux中能执行shell脚本

    5.1、安装ssh插件

    在这里插入图片描述

    安装完成重启一下Jenkins

    5.2、添加ssh登录账号凭据

    在这里插入图片描述

    5.3、配置全局ssh

    系统管理–>系统配置
    在这里插入图片描述

    在这里插入图片描述

    6、配置jdk和maven

    系统管理 —> 全局工具配置

    在这里插入图片描述
    在这里插入图片描述

    7、git项目的核心代码

    代码结构

    在这里插入图片描述

    7.1、application.yml

    server:
      port: 8888
      servlet:
        context-path: /say
    
    • 1
    • 2
    • 3
    • 4

    7.2、bootstrap.yml

    spring:
      application:
        name: demo1
    
    • 1
    • 2
    • 3

    7.3、docker-entrypoint.sh

    #!/bin/bash
    
    
    # JVM参数
    JAVA_OPTS=
    #  当JAVA_JVM_OPTS1长度大于0时为真
    if [ -n "${JAVA_JVM_OPTS1}" ] ; then
      JAVA_OPTS="${JAVA_OPTS} ${JAVA_JVM_OPTS1}"
    fi
    
    if [ -n "${JAVA_JVM_OPTS2}" ] ; then
      JAVA_OPTS="${JAVA_OPTS} ${JAVA_JVM_OPTS2}"
    fi
    #  当LOG_OPTS长度==0时为真
    LOG_OPTS=
    if [ -z "${LOG_OPTS}" ] ; then
      LOG_OPTS="-Dlogging.file.name=${LOG_FILE} -Dlogging.file.path=${LOG_PATH}"
    fi
    
    # 打印配置参数
    echo "JVM启动参数:"${JAVA_OPTS}
    echo "日志参数:"${LOG_OPTS}
    java -server ${JAVA_OPTS} ${LOG_OPTS} -jar  /opt/app/app.jar
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    7.4、Dockerfile

    FROM java:8
    # 环境变量
    # 内存参数
    ENV JAVA_JVM_OPTS1=-Xms1024m
    ENV JAVA_JVM_OPTS2=-Xmx1024m
    
    #日志输出路径
    ENV LOG_PATH=/var/log/demo1/
    ENV LOG_FILE=/var/log/demo1/demo1.log
    
    
    WORKDIR /opt/app
    
    # 拷贝代码和配置文件
    COPY *.jar /opt/app/app.jar
    COPY ./config  /opt/app/config
    # 拷贝脚本到可执行目录
    COPY docker-entrypoint.sh /usr/local/bin/
    
    EXPOSE 8888
    # 授予权限
    RUN chmod +x /usr/local/bin/docker-entrypoint.sh
    
    ENTRYPOINT ["docker-entrypoint.sh"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    7.5、业务代码

    在这里插入图片描述

    8、使用Jenkins部署项目

    8.1、创建任务

    hello_world_docker
    
    • 1

    在这里插入图片描述

    8.2、general配置

    在这里插入图片描述

    8.2.1、丢弃旧的构建

    1. 问题:服务器资源是有限的,有时候保存了太多的历史构建,会导致Jenkins速度变慢,并且服务器硬盘资源也会被占满。
    2. 解决方案:
      1. 保持构建天数
      2. 保持构建的最大个数

    8.3、源码管理

    在这里插入图片描述
    在这里插入图片描述

    8.3.1、Git

    支持主流的github和gitlab代码仓库。

    8.3.2、Repository URL

    仓库地址

    8.3.3、Credentials

    1. 凭证
    2. 可以使用以下方式登陆git仓库
      1. HTTP方式的用户名密码
      2. RSA文件

    8.3.4、Branches to build

    1. 构建的分支。
    2. */master表示master分支,也可以设置为其他分支。

    8.3.5、源码浏览器

    1. 你所使用的代码仓库管理工具,如github, gitlab.

    8.4、构建任务的触发器

    不操作
    在这里插入图片描述

    8.4.1、触发远程构建(使用脚本)

    该选项会提供一个接口,可以用来在代码层面触发构建。

    8.4.2、其他工程构建后触发

    在其他工程构建后构建

    8.4.3、定时构建

    1. 每隔一段时间进行构建
    2. 日程表类似linux crontab书写格式。 列如
      1. 每隔30分钟进行一次构建:H/30 * * * * *

    8.4.4、GitHub hook trigger for GITScm polling

    当有更改push到gitlab代码仓库,即触发构建。

    8.4.5、轮询 SCM

    1. 该选项是配合 2.3.4 使用的。
    2. 当代码仓库发生改动,jenkins并不知道。需要配置这个选项,周期性的去检查代码仓库是否发生改动

    8.5、添加maven构建

    在这里插入图片描述

    在这里插入图片描述

    8.6、增加构建执行shell

    在这里插入图片描述

    在这里插入图片描述

    #!/bin/bash
    # 服务名称
    server_name=demo1
    port=8888
     
    # 项目目录
    project_dir=/var/jenkins_home/workspace/hello_world_docker/$server_name
    
     
    cp $project_dir/target/*.jar  $project_dir/docker
    
    
    # 进入docker目录
    cd $project_dir/docker/
    
    
    # 修改jar权限
    chmod 755 *.jar
    
    echo "看看docker能不能用"
    docker -v
    
    echo "停止$server_name容器"
    # 停止容器
    docker stop $server_name
    
    echo "删除$server_name容器"
    # 删除容器
    docker rm $server_name
    echo "删除$server_name镜像"
    # 删除镜像
    docker rmi $server_name
    echo "打包镜像"
    # 打包镜像
    docker build -t $server_name .
    echo "运行镜像"
    # 运行镜像
    docker run -d -p $port:$port --name $server_name $server_name
     
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    9、测试

    9.1、查看镜像

    docker images
    
    • 1

    在这里插入图片描述

    9.2、查看容器

    docker ps | grep demo1
    
    
    • 1
    • 2

    在这里插入图片描述

    9.3、测试应用

    http://192.168.187.171:8888/say/hello
    
    • 1

    在这里插入图片描述

  • 相关阅读:
    进入小公司的初级程序员要如何自我提高?
    采用cv2和默认的人脸识别分类器实现人脸检测功能
    FastJsonAPI
    React技术栈 --》plugin与JSX语法使用 ## Day2
    【DTEmpower案例操作教程】向导式建模
    算法总结-栈和队列
    消除卡顿 mac MATLAB2022b m1/m2原生下载安装 教程
    顺序表第三节(通讯录基础版)
    14.收藏模块——peewee创建多对多关系表模型、tornado增加接口、tornado删除接口
    JL杰理sop8蓝牙芯片ble型号KT6368A的功能简介以及应用于香薰机
  • 原文地址:https://blog.csdn.net/zhou920786312/article/details/125955707