• Jenkins——发布项目到docker


    本文是基于Jenkins部署在Windows Server,通过把项目推送到远程服务器,使用远程服务器上的docker构建镜像并运行
    在这里插入图片描述
    本文涉及docker的相关命令和使用
    均为alpha0808大佬的指导

    在这里插入图片描述

    一、准备工作

    1. 部署Jenkins,详情见Windows下安装Jenkins
    2. 添加插件Multiple SCMs、Publish Over SSH

    二、配置全局

    在Jenkins上全局配置maven、jdk、git,用于部署java项目。

    打开Manage Jenkins,点击Global Tool Configuration

    在这里插入图片描述

    maven配置文件

    设置服务器中maven的setting.xml的路径

    在这里插入图片描述

    jdk

    点击安装jdk
    在这里插入图片描述
    Install automatically(自动安装)勾选去掉,填写服务器上jdk的安装目录
    在这里插入图片描述

    git

    Install automatically(自动安装)勾选去掉,填写git下bin目录+git
    在这里插入图片描述

    maven

    点击maven安装
    在这里插入图片描述
    Install automatically(自动安装)勾选去掉,填写服务器上maven的目录

    在这里插入图片描述
    设置完,点击应用

    sh配置(windows)

    windows上部署的Jenkins无法自动找打可以执行sh,所以需要配置。
    在这里插入图片描述

    Manage JenkinsConfigure SystemShell设置sh作为脚本程序(我这里使用git的sh作为执行脚本程序)

    三、发布项目

    3.1 新建项目

    点击”新建Item
    在这里插入图片描述
    输入条目名称,选择"Freestyle project",点击确定

    在这里插入图片描述
    创建成功
    在这里插入图片描述

    3.2 常规配置

    点击条目,选择"配置"
    在这里插入图片描述

    3.2.1 丢弃旧的构建

    勾选"Discard old builds",设置构建的保持时间和个数,通过删除旧的构建来释放磁盘空间,如果不设置,默认365天删除一次
    在这里插入图片描述

    3.2.2 设置构建项目参数

    构建项目需要通过参数动态构建时使用。

    勾选"This project is parameterized",点击"添加参数",选择对应的参数类型
    在这里插入图片描述

    示例:
    通过参数version,设置项目的版本,构建jar至nexus使用

    选择String Parameter,设置版本参数version
    在这里插入图片描述

    3.2.3 源码管理

    在实际开发中,我们可以通过svn、git来进行源码管理,因为Jenkins默认只进行了git的源码代理。
    在准备工作安装了Multiple SCMs插件,这样就能更自由的选择源码管理方式。这里只说通过Jenkins自带的git源码管理。
    设置源码地址:
    在这里插入图片描述
    使用ssh的git地址,需要创建对应的凭证,点击"Credential"下的"添加"
    在这里插入图片描述
    设置凭据类型:SSH Username with private key
    在这里插入图片描述
    设置用户名和对应的ssh凭据(git私钥)
    在这里插入图片描述
    设置分支
    在这里插入图片描述

    四、构建和发布

    4.1 构建

    在构建页签下,新增构建步骤"invoke top-level Maven targets"
    在这里插入图片描述

    4.2 发布

    在"构建后操作"页签,点击"增加构建后操作步骤",选择"Send build artifacts over SSH"
    在这里插入图片描述
    添加对应远程服务器的ip地址
    在这里插入图片描述
    填写文件路径忽视前缀,以及远程服务器的存放文件路径(我这里是默认把整个文件发布到远程服务器)
    在这里插入图片描述
    发布后命令,示例如下:

    #!/bin/bash
    cd jenkinsTest/target
    ls -l
    mv jenkinsTest.jar ../
    cd ../
    rm -rf src target *.iml *.xml *.md
    
    docker build -t 127.0.0.1/ms/jenkinsTest:1.0.0 .
    docker push 127.0.0.1/ms/jenkinsTest:1.0.0
    
    if docker ps -a |awk '{print $NF}'|grep '^jenkinsTest'; then
        docker rm -f jenkinsTest
    fi
    
    docker run -d -p 9901:9901 -e JAVA_OPTS="-Xrs -Xms1g -Xmx2g -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m" --env-file=/opt/env.list  -v /data:/data -v /ibase/logs:/ibase/logs  --net=host --name jenkinsTest 127.0.0.1/ms/jenkinsTest:1.0.0
    
    if docker images | grep ""; then
        docker rmi -f $(docker images | grep "" | awk "{print \$3}")
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    命令解释如下:

    默认打包后的jar包是在target目录下,而dockerfile跟target是同一级目录,将jar提到上级目录,同时删除其他冗余文件

    #!/bin/bash
    cd jenkinsTest/target
    ls -l
    mv jenkinsTest.jar ../
    cd ../
    rm -rf src target *.iml *.xml *.md
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    构建镜像,同时将镜像推向仓库

    docker build -t 127.0.0.1/ms/jenkinsTest:1.0.0 .
    docker push 127.0.0.1/ms/jenkinsTest:1.0.0
    
    • 1
    • 2

    镜像启动前,删除对应的进程,将镜像放入容器启动,然后删除所有none镜像或停止的容器

    if docker ps -a |awk '{print $NF}'|grep '^jenkinsTest'; then
       docker rm -f jenkinsTest
    fi
    
    docker run -d -p 9901:9901 -e JAVA_OPTS="-Xrs -Xms1g -Xmx2g -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m" --env-file=/opt/env.list  -v /data:/data -v /ibase/logs:/ibase/logs  --net=host --name jenkinsTest 127.0.0.1/ms/jenkinsTest:1.0.0
    
    if docker images | grep ""; then
       docker rmi -f $(docker images | grep "" | awk "{print \$3}")
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    4.3 构建

    配置保存完毕,返回条目,点击"build now"搞定
    在这里插入图片描述

  • 相关阅读:
    [gstreamer] overview of gstreamer
    oracle 错题汇总
    快速了解什么是:微服务
    查询人员列表
    uniapp 页面间传参方法
    【白话spring cloud(一)】为什么要用spring cloud?
    vscode 配置默认shell
    github国内加速访问有效方法
    CPSC发布关于亚马逊含有纽扣电池或硬币电池产品的相关规则标准!UL4200A
    Springboot毕设项目高校重点学科建设管理系统55290(java+VUE+Mybatis+Maven+Mysql)
  • 原文地址:https://blog.csdn.net/jc_hook/article/details/126098424