jenkins本地打包远程部署项目

1、 Jenkins简介

Jenkins是一款开源的持续集成工具,用于自动化构建、测试和部署软件项目。它可以通过插件扩展来支持各种不同的开发语言和工具。Jenkins提供了一个简单易用的Web界面,可以通过界面配置和管理构建任务,也可以通过命令行工具进行操作。

Jenkins的核心功能是构建和测试软件项目。它可以从源代码管理系统(如Git、SVN等)中拉取代码,并根据预先定义的构建脚本进行编译、打包和测试。Jenkins还提供了丰富的插件和集成工具,可以与各种测试框架、部署工具、静态代码分析工具等进行集成,从而实现全自动化的构建和测试流程。

2、实际案例分析

开发测试之后,我们希望在生产上更新代码。关于如何把打包后的代码放到生产环境,有以下两个基本方法。

1.在生产机器上安装代码打包相关的环境,例如git,maven等,重新检出/更新代码,直接在生产机器上打包生成目标代码。(这种方式容易暴露代码,不安全)

2.在本地内网打包,再传送到远程生产环境进行部署。(这种方式可以实现代码本地加密,比较安全)

本文演示如何使用jenkins,在本地代码更新打包代码,然后再发送到远程进行部署。

操作步骤

  1. jenkins通过绑定源代码仓库,自动检出/更新代码
  2. 本地打包依赖,生成目标jar包
  3. 通过ssh部署到远程指定目录
  4. 远程执行重启脚本

3.案例步骤

3.1、绑定源代码仓库,自动检出/更新代码

进入Jenkins管理工具,新建任务,选择构建自由风格选项,输入相关参数,点击确定

滑动到"源码管理"模块,如果没有这个模块,可以在jenkins插件仓库下载 "Git 插件 "

输入项目地址及票据,点击保存。之后jenkins就会在本作业内部的工作目录检出项目代码

3.2、本地打包代码

使用jenkins进行打包,我们通过增加构建步骤,执行shell来执行。如下图。

jenkins会自动为每个作业生成一个工作目录,如果不熟悉工作目录的生成路径,可以在脚本使用

pwd命令打印下。

通过mvn进行打包,并把生成的jar包及依赖环境拷贝到当前目录(打包脚本依个人项目而异)。

3.3、部署jar包到生成环境

接下来就需要将生成的包部署到远程目标,这一步是关键,也比较麻烦。

3.3.1安装ssh工具

Jenkins 提供了多种 SSH 相关的插件,用于支持 SSH 连接、远程执行任务、传输文件等操作。以下是一些常用的 Jenkins SSH 插件。

  1. SSH Plugin (ssh): 这是 Jenkins 的核心插件之一,提供了基本的 SSH 连接和执行远程命令的功能。

  2. SSH Build Step / SSH一步构建 (ssh-steps): 允许在构建过程中执行 SSH 命令。

  3. SSH Agent Plugin (ssh-agent): 这个插件用于管理 SSH 密钥,可以安全地存储和使用 SSH 私钥。

  4. SCP Plugin (scp): 用于通过 SCP 协议在 Jenkins 与远程服务器之间安全地传输文件。

  5. SFTP Plugin (sftp): 支持通过 SFTP 协议上传和下载文件到远程服务器。

  6. Publish over SSH: 允许你通过SSH协议将构建后的文件传输到远程服务器。

本文选择Publish over SSH工具进行演示。

首先,需要到jenkins插件仓库下载"Publish Over SSH",下载之后,效果如下。

其次,配置远程ssh私钥

进入jenkins系统设置

配置远程服务器的登录信息(点击高级配置ssh私钥),如下。

配置之后,可以点击右下角的按钮,检查下配置是否生效(显示Success)。

3.3.2.使用ssh工具

返回到作业配置,滑动到SSH模块

选择远程服务器的名称,增加TransferSet

需要注意的是,这里的

source files是相对于Jenkins作业的工作目录而言,如果有多个文件,可以用逗号隔开。

remote directory是远程服务器的目标目录,可以使用绝对路径。

exec command是传送文件之后在远程服务器执行的命令。

这里的传送文件,和执行脚本,至少选择一项。

如果需要先在远程服务器执行脚本,再传送文件,可以配置两个TransferSet。第一个配置执行脚本,第二个再配置传送文件。

具体的说明,可参考:

publish-over-ssh相关说明

3.4、远程执行脚本

在上一节的ransferSet配置传送文件之后,再执行脚本。

脚本的主要内容是:

1.检查服务是否启动,如果是,则先停止;

2.通过定制的jvm参数,重新启动服务器

脚本大致如下:

bash 复制代码
#!/bin/bash
pid=`jps -lv|grep yourserver|awk '{print $1}'`
if [ -z $pid ]; then
        echo "app web stopped"
else
        echo "app web is running, prepared to stop"
        kill -9 $pid
        echo "app web has stopped"
fi
#稍等片刻
sleep 2


JVM_ARGS="-Xms1024m -Xmx1024m "
JVM_ARGS="$JVM_ARGS"" -XX:+UseZGC -XX:+PrintGCDetails"

nohup java $JVM_ARGS  -jar yourserver.jar --spring.profiles.active=test >  output.file 2>&1  &
sleep 3
pid=`jps -lv|grep yourserver|awk '{print $1}'`
echo "server is running, pid = $pid"

至此,使用Jenkins进行远程部署的案例演示已经结束。通过Jenkins,我们可以非常方便地进行远程部署。但是,这种方式适合部署少量的远程服务,如果需要进行大批量的作业,可能需要结合ansible工具进行批量处理。

相关推荐
我言秋日胜春朝★7 分钟前
【Linux】进程地址空间
linux·运维·服务器
C-cat.28 分钟前
Linux|环境变量
linux·运维·服务器
yunfanleo43 分钟前
docker run m3e 配置网络,自动重启,GPU等 配置渠道要点
linux·运维·docker
烦躁的大鼻嘎1 小时前
【Linux】深入理解GCC/G++编译流程及库文件管理
linux·运维·服务器
乐大师1 小时前
Deepin登录后提示“解锁登陆密钥环里的密码不匹配”
运维·服务器
bug管理者1 小时前
UI自动化测试中公认最佳的设计模式-POM
jenkins·策略模式
ac.char1 小时前
在 Ubuntu 上安装 Yarn 环境
linux·运维·服务器·ubuntu
敲上瘾1 小时前
操作系统的理解
linux·运维·服务器·c++·大模型·操作系统·aigc
传而习乎3 小时前
Linux:CentOS 7 解压 7zip 压缩的文件
linux·运维·centos
soulteary3 小时前
突破内存限制:Mac Mini M2 服务器化实践指南
运维·服务器·redis·macos·arm·pika