Jenkins docker部署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('Deploy') {
            steps {
                echo '=====================拷贝远程部署开始====================='
                // sshCommand remote: [name: 'Remote Server', command: 'cd /path/to/your/app && ./deploy.sh'], failOnError: true
                echo '=====================拷贝远程部署完成====================='
            }
        }
    }
}

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

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

docker exec -it jenkins ssh-keygen -t rsa

将生成的公钥复制到远程服务器上的administrators_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

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

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

相关文章

Python量化择时的技术指标函数

Python量化择时的技术指标函数 技术指标通过对原始数据(开盘价、收盘价、最低价、最高价、成交量、成交金额、成交笔数)的处理,来反映出市场的某一方面深层的内涵,这些内涵是很难通过原始数据直接看出来的。技术指标能客观地反映…

EXCEL怎样把筛选后含有公式的数据,复制粘贴到同一行的其它列?

自excel2003版之后,常规情况下,复制筛选后的数据,会忽略隐藏行,仅复制其筛选后的数据,粘贴则是粘贴到连续单元格区域,不管行是在显示状态还是隐藏状态。 一、初始数据: 二、题主的复制粘贴问题…

Codigger数据篇(下):数据安全的全方位保障

在数字化浪潮中,数据已成为现代企业的核心财富。Codigger作为领先的数据服务平台,深知数据安全对于用户的重要性,因此在深挖数据价值的同时,我们始终坚守数据安全防线。 一、双重加密技术保障 Codigger平台运用先进的加密通信和…

C语言学习【最基本】

C语言学习 简单的 C 程序示例 #include "stdio.h" /* 提供键盘输入与屏幕输出支持 */ /* 相当于把stdio.h文件中的所有内容都输入到该行所在位置 拷贝-粘贴 *//* void 表示不带任何参数 */ int main(void) /* 函数名 */ { …

UE—动画

1.动画蓝图 创建动画蓝图 在蓝图中添加状态机 状态机中状态的转换 转换条件设定 播放的动画 使用动画资源 使用混合空间 2.混合空间 混合空间1D 阿赵UE学习笔记——26、动画混合空间_ue 一维动画混合空间-CSDN博客 蓝图创建 混合空间内 按Ctrl到动画节点上即可预览 修改…

1. 傅里叶变换原理

1. 频率域的引入 1.1 时域角度 1.2. 频域角度 不同的角度表达的是同一件事情,从时间域和空间域来进行表达同一间事情 。时间域是都动态的,频率域是静止的 1.3. 时域角度和频域角度 1.4 相位 2 函数的时域角度 2.1 时间域 2.2 频率域 2.3 例子 2.3…

Spring扩展点(一)Bean生命周期扩展点

Bean生命周期扩展点 影响多个Bean的实例化InstantiationAwareBeanPostProcessorBeanPostProcessor 影响单个Bean的实例化纯粹的生命周期回调函数InitializingBean(BeanPostProcessor 的before和after之间调用)DisposableBean Aware接口在生命周期实例化过…

eSIM Network搭建指南

有任何关于GSMA\IOT\eSIM\RSP\业务应用场景相关的问题,欢迎W: xiangcunge59 一起讨论, 共同进步 (加的时候请注明: 来自CSDN-iot).

redis 缓存一致性,缓存穿透,缓存雪崩,缓存击穿

1.缓存一致性: 缓存一致性就是通过各种方法保证缓存与数据库信息一种,其中最多的办法就是想尽一切办法对过期key进行清除,以保证redis和数据库信息一只,其中就包括了这篇文章中提到的内存淘汰策略,过期key的清除等等&…

MongoDB的分片集群

MongoDB分片技术 介绍 ​ 分片(sharding)是MongoDB用来将大型集合分割到不同服务器上采用的方法。分片这种说法起源于关系型数据库。但是实际上非关系型数据库在分片方面相比于传统的关系型数据库更有优势。 ​ 与MySQL分库方案对比,MongoDB…

微信小程序之搜索框样式(带源码)

一、效果图&#xff1a; 点击搜索框&#xff0c;“请输入搜索内容消失”&#xff0c;可输入关键字 二、代码&#xff1a; 2.1、WXML代码&#xff1a; <!--搜索框部分--><view class"search"><view class"search-btn">&#x1f50d;&l…

腾讯云IM即时通信引入(React Web端组件式)

开发环境要求 React ≥ v18.0 &#xff08;17.x 版本不支持&#xff09; TypeScript node&#xff08;12.13.0 ≤ node 版本 ≤ 17.0.0, 推荐使用 Node.js 官方 LTS 版本 16.17.0&#xff09; npm&#xff08;版本请与 node 版本匹配&#xff09; chat-uikit-react 集成 …

图像处理ASIC设计方法 笔记21 标记ASIC的顶层状态机

目录 (一)标记ASIC的工作流程1 ASIC首先从控制寄存器内读出待标记图像的基本参数2若写入了有效的启动命令,则进入下面一帧图像的标记过程。3 ASIC通过接口模块从FIFO1中读取待标记的图像4一帧图像初步标记完成后进行等价表的整理压缩5从临时标记存储器中读取临时标记送入标记…

【Github】将github仓库作为图床使用

创建github仓库 首先创建一个github仓库专门用于存储图片&#xff0c;具体步骤如下&#xff1a; 1.点击新的仓库按钮 2.初始配置&#xff1a;随便填写一个仓库名&#xff1b;这里的仓库状态一定要是public公开的&#xff0c;不然后面访问不了图片 下载PicGo PicGo官网 在A…

【深度学习基础(3)】初识神经网络之深度学习hello world

文章目录 一. 训练Keras中的MNIST数据集二. 工作流程1. 构建神经网络2. 准备图像数据3. 训练模型4. 利用模型进行预测5. (新数据上)评估模型精度 本节将首先给出一个神经网络示例&#xff0c;引出如下概念。了解完本节后&#xff0c;可以对神经网络在代码上的实现有一个整体的了…

【深度学习】Yolov8使用心得

兜兜转转&#xff0c;原本以为和yolov没啥关系了&#xff0c;但是新公司又回到了yolov侧。 yolov8 可以用pip的方式安装&#xff0c;以package的三方软件包形式&#xff0c;隐藏了很多细节。当然你也可以从git上把全套代码down下来。 1.分类模型 1.1 改错误 位置&#xff1a…

区块链扩容:水平扩展 vs.垂直扩展

1. 引言 随着Rollups 的兴起&#xff0c;区块链扩容一直集中在模块化&#xff08;modular&#xff09;vs. 整体式&#xff08;monolithic&#xff09;之争。 如今&#xff0c;模块化与整体式这种一分为二的心理模型&#xff0c;已不适合于当前的扩容场景。本文&#xff0c;将展…

Python机器学习手册:从预处理到深度学习的实际解决方案

书籍&#xff1a;Machine Learning with Python Cookbook: Practical Solutions from Preprocessing to Deep Learning 作者&#xff1a;Kyle Gallatin&#xff0c;Chris Albon 出版&#xff1a;OReilly Media 书籍下载-《Python机器学习手册&#xff1a;从预处理到深度学习…

ASP.NET网上车辆档案管理系统

摘 要 本文采用基于Web的Asp.net技术&#xff0c;并与sql server 2000数据库相结合&#xff0c;研发了一套车辆档案管理系统。该系统扩展性好&#xff0c;易于维护。简化了车辆档案设计流程&#xff0c;去除了冗余信息。汽车销售企业可以通过本系统完成整个销售及售后所有档案…

IoTDB 入门教程 基础篇⑦——数据库管理工具 | DBeaver 连接 IoTDB

文章目录 一、前文二、下载iotdb-jdbc三、安装DBeaver3.1 DBeaver 下载3.2 DBeaver 安装 四、安装驱动五、连接数据库六、参考 一、前文 IoTDB入门教程——导读 二、下载iotdb-jdbc 下载地址org/apache/iotdb/iotdb-jdbc&#xff1a;https://maven.proxy.ustclug.org/maven2/o…