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工具进行批量处理。

相关推荐
Linux运维技术栈37 分钟前
Ansible(自动化运维)环境搭建及ansible-vault加密配置
运维·自动化·ansible
Bessssss2 小时前
centos权限大集合,覆盖多种权限类型,解惑权限后有“. + t s”问题!
linux·运维·centos
苹果醋32 小时前
Golang的文件加密工具
运维·vue.js·spring boot·nginx·课程设计
jwensh2 小时前
【Jenkins】Declarative和Scripted两种脚本模式有什么具体的区别
运维·前端·jenkins
大熊程序猿3 小时前
xxl-job docker 安装
运维·docker·容器
董健正4 小时前
centos制作离线安装包
linux·运维·centos
咏颜4 小时前
Ubuntu离线安装Docker容器
linux·运维·服务器·经验分享·ubuntu·docker
DexterLien5 小时前
Debian 12 安装配置 fail2ban 保护 SSH 访问
运维·debian·ssh·fail2ban
娶不到胡一菲的汪大东6 小时前
Shell脚本
linux·运维·ubuntu
xserver26 小时前
ensp 基于静态NAT发布公司网站服务器,
运维·服务器