docker jenkins 部署springboot项目

1、创建jenkins容器

1,首先,我们需要创建一个 Jenkins 数据卷,用于存储 Jenkins 的配置信息。可以通过以下命令创建一个数据卷:

docker volume create jenkins_data

启动 Jenkins 容器并挂载数据卷:

docker run -dit --name=jenkins -p 9999:8080 -u=root --restart=always -v jenkins_data:/var/jenkins_home jenkins/jenkins

参数说明:

-i:表示运行容器
-t:表示容器启动后会进入其命令行
-d:守护式方式创建容器在后台运行
--name:容器名称
-p 9999:8080:端口映射,宿主机端口:jenkins 容器端口
-u=root:指定容器用户为 root 用户
--restart=always 参数用于在容器重启时自动启动,这样即使容器被删除,数据卷的数据也不会丢失
-v jenkins_data:/var/jenkins_home jenkins/jenkins:将数据卷 “jenkins_data” 挂载到容器的 /var/jenkins_home 目录上

2,然后执行以下命令,获取解锁jenkins的密码:

docker logs jenkins

浏览器登陆,输入上面日志的密码,并按提示安装插件:

http://localhost:9999/

3,安装maven:

docker exec -it jenkins apt-get update
docker exec -it jenkins apt-get install -y maven

4,最后重启 jenkins 容器:

docker restart jenkins

2、创建jenkins项目:

1,重新登陆 jenkins,点 New Item,新建流水线项目:

在这里插入图片描述
配置参考:https://blog.csdn.net/cs888zsy/article/details/132910601

其中Jenkins file脚本如下:

pipeline {
  agent any
    stages {
        
        stage('拉取代码') {
            agent none
            steps {
                echo '=====================拉取代码开始====================='
                git(url: 'https://github.com/xxx.git', credentialsId: 'JackyZhang8888', branch: 'main', changelog: true, poll: false)
                echo '=====================拉取代码完成====================='

            }
        }
        
        
        stage('编译打包') {
            steps {
                    echo '=====================项目编译打包开始====================='
                    sh 'mvn clean package -Dmaven.test.skip=true'
                    echo '=====================项目编译打包完成====================='
            }
        }
        
        stage('拷贝项目') {
            steps {
                    echo '=====================拷贝项目路径开始====================='
                    sh '''
                    BASE_DIR="/application"
                    SOURCE_DIR="/var/jenkins_home/workspace/FileSystem/target/"
                    DATE_FORMAT="%Y%m%d"
                    DT=$(date +$DATE_FORMAT)
                    TARGET_FOLDER="$BASE_DIR/$DT"
                    
                    if [ ! -d "$TARGET_FOLDER" ]; then
                        mkdir -p "$TARGET_FOLDER"
                    fi
                    
                    cp $SOURCE_DIR/*.jar "$TARGET_FOLDER"
                    cp $SOURCE_DIR/*.jar "$BASE_DIR"

                    '''
                    echo '=====================拷贝项目路径完成====================='
            }
        }

        stage('远程部署') {
            steps {
                echo '=====================远程部署开始====================='
                sh 'scp /application/demo-0.0.1-SNAPSHOT.jar Administrator@192.168.0.107:H:/application/dictionary/'
                sh 'ssh Administrator@192.168.0.107 "H: && cd H:\\application && deploy.bat"'
                echo '=====================远程部署完成====================='
            }
        }
    }
}

执行效果如下:

在这里插入图片描述

其中远程部署(windows服务器)的步骤需要做如下准备:

3,部署springboot到远程服务器

实现方式:Publish Over SSH + OpenSSH:通过windows端安装openssh与jenkins建立ssh隧道可以实现sftp传输文件和远程执行命令

1、首先需要先在远程windows服务器安装openssh。通过PowerShell安装OpenSSH服务器:

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'

这些命令首先添加OpenSSH服务器功能,然后启动SSH服务,并将其设置为开机自动启动。也可以进入Windows 10 设置-应用-可选功能,添加可选应用,找到OpenSSH服务端并安装。

此时,验证容器telnet 22端口可以通:

docker exec -it jenkins telnet 192.168.0.107 22
Trying 192.168.0.107...
Connected to 192.168.0.107.
Escape character is '^]'.
SSH-2.0-OpenSSH_for_Windows_8.1

2、配置免密登陆:
(1)在C:\ProgramData\ssh\shd_config中增加如下配置:

PubkeyAuthentication yes

并在在该配置文件中确定公钥路径administrators_authorized_keys的位置:

Match Group administrators
       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

这表明对于管理员用户,公钥授权文件应该位于%ProgramData%/ssh/administrators_authorized_keys中。

非管理员用户需要将上述sshd_config内容注释掉,其他电脑的ssh公钥添加到C:\Users\username\.ssh\authorized_keys中。

(2)jenkins容器内生成SSH密钥对:

docker exec -it jenkins ssh-keygen -t rsa

将生成的公钥复制到远程服务器上的authorized_keys文件中,默认路径C:\Users\Administrator\.ssh\

(3)右键authorized_keys,选择属性->安全->高级->(左下角)禁用继承;
弹框选择“将已继承的权限转换为此对象的显式权限”。

(4)Win键+R键,输入并运行services.msc,打开服务列表,检查OpenSSH Authentication Agent服务是否正常运行。如果是禁用状态需要启用,然后重启一下sshd服务

此时重启openssh后jenkins服务器中使用如下命令连接windows应该是没问题的:

docker exec -it jenkins ssh -i /root/.ssh/id_rsa Administrator@192.168.0.107

3、配置Publish over SSH

先在【插件管理】中下载Publish over SSH:
在这里插入图片描述
然后在【系统配置】里配置SSH Servers:填入ip、私钥后测试成功:
在这里插入图片描述

PS: 远程部署还可以使用如下插件:

SSH Pipeline Steps:https://plugins.jenkins.io/ssh-steps/
SSH Agent:https://plugins.jenkins.io/ssh-agent/

deploy:

::  找到占用8080端口的应用并删除
@echo off
for /f "tokens=5" %%a in ('netstat -ano ^| findstr :8080') do (
    taskkill /PID %%a /F
)

::  备份
scp  H:\application\demo-0.0.1-SNAPSHOT.jar  H:\application\backup
scp  H:\application\dictionary\demo-0.0.1-SNAPSHOT.jar H:\application\

::  后台启动应用
@echo off
start javaw -jar H:\application\demo-0.0.1-SNAPSHOT.jar --workSpace=H 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/600688.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

搞定 TS 装饰器,让你写 Node 接口更轻松

前言 亲爱的小伙伴,你好!我是 嘟老板。你是否用过 TypeScript 呢?对 装饰器 了解多少呢?有没有实践应用过呢?今天我们就来聊聊 装饰器 的那点事儿,看看它有哪些神奇的地方。 什么是装饰器 咱们先来看一段…

密码学《图解密码技术》 记录学习 第十三章

目录 第十三章 13.1 本章学习的内容 13.2 PGP 简介 13.2.1 什么是 PGP 13.2.2 关于 OpenPGP 13.2.3关于GNU Privacy Guard 13.2.4 PGP 的功能 公钥密码 数字签名 单向散列函数 证书 压缩 文本数据 大文件的拆分和拼合 13.3 生成密钥对 13.4 加密与解密 13.4.1 加密 生成…

Qt | QComboBox(组合框)

01、上节回顾 Qt 基础教程合集02、QComBox 一、QComboBox 类(下拉列表、组合框) 1、QComboBox 类是 QWidget 类的直接子类,该类实现了一个组合框 2、QComboBox 类中的属性 ①、count:const int 访问函数:int count() const; 获取组合框中的项目数量,默认情况下,对于空…

js 图片渐变

1. 点击图片,使其渐变为另一张图片 通过定义keyframes来创建一个淡入淡出的动画效果。当图片被点击时,先添加淡出动画使图片透明度从0渐变到1,然后在1秒后切换图片源并添加淡入动画使新图片透明度从0渐变到1,实现图片渐变效果。 …

光伏SRM供应商管理解决方案

供应商管理是光伏企业中重要的一环,通过SRM管理供应商,可以提高产品质量,降低采购成本,并集成供应链,提高核心竞争力。 一、搭建管理系统 分为供应商和商户,供应商需要完善基本信息、类别、等级、产品概要…

2005-2021年全国各地级市生态环境注意力/环保注意力数据(根据政府报告文本词频统计)

2005-2021年全国各地级市生态环境注意力/环保注意力数据(根据政府报告文本词频统计) 2005-2021年全国各地级市生态环境注意力/环保注意力数据(根据政府报告文本词频统计) 1、时间:2005-2021年 2、范围:2…

记一些内存取证题

生活若循规蹈矩,我们便随心而动 1.Suspicion 给了俩文件 python2 vol.py -f mem.vmem imageinfo 查看可疑进程 python2 vol.py -f mem.vmem --profileWinXPSP2x86 pslist 发现可疑进程TrueCrypt.exe 把这个进程提取出来。memdump -p 进程号 -D 目录 python2 vol…

Ypay源支付6.9无授权聚合免签系统可运营源码

Ypay源支付6.9无授权聚合免签系统可运营源码 效果图说明安装说明后台 部分源码领取源码下期更新预报 效果图 YPay是一款专为个人站长设计的聚合免签系统,YPay基于高性能的ThinkPHP 6.1.2 Layui PearAdmin架构,提供了实时监控和管理的功能,让…

GhostNetV2 Enhance Cheap Operation with Long-Range Attention 论文学习

论文地址:https://arxiv.org/abs/2211.12905 代码地址:https://github.com/huawei-noah/Efficient-AI-Backbones/tree/master/ghostnetv2_pytorch 解决了什么问题? 在计算机视觉领域,深度神经网络在诸多任务上扮演着重要角色。为…

Linux —— 信号(3)

Linux —— 信号(3) Core dump为什么core默认是被关闭的阻塞信号信号其他相关常见概念信号递达信号未决信号阻塞两者的区别信号的结构 信号集操作函数一个简单使用例子sigpending的使用例子 我们今天接着来了解信号: Core dump 大家不知道有…

大模型爱好者的福音,有了它个人电脑也可以运行大模型了

GPT4ALL是一款可以运行在个人电脑上的大模型系统,不需要GPU即可运行,目前支持mac,linux和windows系统。 什么是GPT4ALL? 不论学习任何东西,首先要明白它是个什么东西。 Open-source large language models that run …

3W 1.5KVDC 3KVDC 隔离宽范围输入,单、双输出 DC/DC 电源模块——TP2L-3W 系列

TP2L-3W系列是一款高性能、超小型的电源模块,宽范围2:1,4:1输入,输出有稳压和连续短路保护功能,隔离电压为1.5KVDC、3KVDC工作温度范围为–40℃到85℃。特别适合对输出电压的精度有严格要求的地方,外部遥控功能对您的设计又多一项…

【极速前进】20240423-20240428:Phi-3、fDPO、TextSquare多模态合成数据、遵循准则而不是偏好标签、混合LoRA专家

一、Phi-3技术报告 论文地址:https://arxiv.org/pdf/2404.14219 ​ 发布了phi-3-mini,一个在3.3T token上训练的3.8B模型。在学术基准和内部测试中的效果都优于Mixtral 8*7B和GPT-3.5。此外,还发布了7B和14B模型phi-3-small和phi-3-medium。…

Transformer详解:从放弃到入门(三)

上篇文章中我们了解了多头注意力和位置编码,本文我们继续了解Transformer中剩下的其他组件。 层归一化 层归一化想要解决一个问题,这个问题在Batch Normalization的论文中有详细的描述,即深层网络中内部结点在训练过程中分布的变化问题。  …

风吸式杀虫灯解析

TH-FD2S风吸式杀虫灯是一种创新且环保的害虫控制设备,它结合了太阳能和风力的双重优势,为农业生产、园林绿化以及居民生活等提供了高效且安全的害虫防治方案。 首先,风吸式杀虫灯的工作原理是利用害虫的趋光性,通过特定的光源吸引…

AI视频教程下载:用ChatGPT做SEO的终极教程

ChatGPT是由OpenAI开发的一款尖端人工智能,它已经彻底改变了我们进行搜索引擎优化(SEO)的方式。其先进的语言处理能力使其成为增强网站内容、提高搜索引擎排名和显著提升在线可见性的宝贵工具。 这个全面的课程旨在为你提供使用ChatGPT进行SE…

突破AI迷雾:英特尔携手星环科技打造向量数据库革新方案,直降大模型幻觉

去年爆火的大模型,正在从百模大战走向千行百业落地应用。不过行业数据规模有限,企业数据隐私安全的要求等等因素,都让行业大模型的准确率面临挑战。近期发布的《CSDN AI 开发者生态报告》数据显示,“缺乏数据/数据质量问题”在大模…

ILI9341显示驱动芯片的使用

ILI9341是一种常见的TFT LCD显示驱动芯片,它在众多的应用中都有广泛的使用。这种芯片的一个显著特点是它支持16位RGB565颜色,这意味着它可以显示多达65536种不同的颜色。这使得ILI9341能够提供鲜艳、生动的色彩效果,对于需要表现丰富色彩的应…

解决Python中的 `ModuleNotFoundError: No module named ‘fcmeans‘` 错误

ModuleNotFoundError: No module named fcmeans 解决Python中的 ModuleNotFoundError: No module named fcmeans 错误如何解决这个错误fcmeans 库简介应用实例 解决Python中的 ModuleNotFoundError: No module named fcmeans 错误 在进行数据科学或机器学习项目时,…

【QA】Java常见运算符

前言 本文主要讲述Java常见的运算符 运算符的概念 两个基本概念: 运算符:对字面量或者变量进行操作的符号 表达式:用运算符把字面量或者变量连接起来符合java语法的式子就可以称为表达式 示例: int a 10; int b 20; int …