桥下の民 - Infrastructure
type: channel
link: https://wordplay.work/index.php/category/Infrastructure
items: VSCode 开发 Shell 脚本
items: kafka - docker opt
items: Jenkins Pipeline
items: Docker Machine
items: Docker Swarm
items: Harbor
items: Jenkins Github 项目部署
items: Linux - Git 安装
items: Jenkins 下载&安装
items: Keepalived

VSCode 开发 Shell 脚本
type: item
date: 2025-06-26T09:19:00+00:00
description: 一、VSCode 插件 shellman：提供智能提示和自动补全功能。 shellcheck：提供语法检查的功能。 shell-format：提供代码格式化功能，快捷键：Alt+Shift+f。 Code Runner：提供代码运行功能。 Linux 上脚本首行要声明 bash 解释器，Windows 上也一样。不过，路径要更改为安装 Git 的路径，例如: E:\SOFTWARE\Git\bin/bash。 #!E:\SOFTWARE\Git\bin\bash # basic for command for test in Alabama Alaska Arizona do echo The next state is $test done 二、VSCode 实现 Shell 脚本调试 2.1、Windows 配置 SSH 2.1.1、通过「设置」安装 1、使用 Windows + I 快捷键打开「设置」，依次选择「系统」>「可选功能」。 2、点击「查看功能」，在搜索框中输入 OpenSSH 进行筛选。 3、根据需要勾选： OpenSSH 客户端：可以使用 ssh 命令连接到其他支持 SSH 的设备。 OpenSSH 服务器：允许其他设备通过 SSH 连接到你的电脑。 4、选择好后点击「下一步」，然后点击「安装」开始安装过程。 2.1.2、使用 PowerShell 安装 1、使用 Windows + R 快捷键打开「运行」对话框，输入 powershell，然后按 Ctrl + Shift + Enter 以管理员权限打开 PowerShell 窗口。 2、执行以下命令查看 OpenSSH 安装状态： 3、根据需要安装 OpenSSH 客户端和服务器组件： # 安装 OpenSSH 客户端 Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 # 安装 OpenSSH 服务器 Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 2.1.3、在 Windows 中配置 OpenSSH 服务器 1、当你在 Windows 上安装了 OpenSSH 服务器之后，需要进行一些配置才能接受连接： 2、使用 Windows + R 快捷键打开「运行」对话框，输入 powershell，然后按 Ctrl + Shift + Enter 以管理员权限打开 PowerShell。 Set-Service -Name sshd -StartupType 'Automatic' 3、设置 SSHD 服务自动启动： Start-Service sshd 4、检查 SSH 服务器是否在侦听 22 端口： netstat -an | findstr /i ":22" 5、确保 Windows Defender 防火墙允许 TCP 22 端口的入站连接： Get-NetFirewallRule -Name *OpenSSH-Server* | select Name, DisplayName, Description, Enabled 如规则丢失或被禁用，可以创建新规则： New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 6、可选）如果要修改配置，如设置用户访问权限，可以编辑 sshd_config 配置文件： Start-Process Notepad C:\Programdata\ssh\sshd_config 7、根据需要修改配置文件，保存后关闭记事本。 8、完成更改后，重启 SSHD 服务应用配置： Restart-Service sshd 按照这些步骤，你的 Windows 就能通过 SSH 协议接受连接了。 2.2、使用 VSCode 远程连接 linux 服务 安装 VSCode 插件：Remote - SSH & Bash Debug。 输入：ssh root@192.168.10.102 进行连接。 Remote - SSH 连接后生成 .config： Host 192.168.10.102 HostName 192.168.10.102 User root Bash Debug 配置 launch.json： { // Use IntelliSense to learn about possible attributes. // Hover to view d…

kafka - docker opt
type: item
date: 2024-08-19T03:38:00+00:00
description: 一、docker compose Kafka 单机docker-compose.yml： version: "3.8" services: kafka: image: bitnami/kafka:4.0.0 container_name: kafka ports: - "9092:9092" environment: - KAFKA_ENABLE_KRAFT=yes - KAFKA_KRAFT_CLUSTER_ID=4L6g3nShT-eMCtK--X86sw - KAFKA_CFG_NODE_ID=1 - KAFKA_CFG_PROCESS_ROLES=broker,controller - KAFKA_CFG_LISTENERS=PLAINTEXT://0.0.0.0:9092,CONTROLLER://:9093 - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.10.200:9092 - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka:9093 - KAFKA_CFG_LOG_DIRS=/bitnami/kafka/data volumes: - kafka-data:/bitnami/kafka volumes: kafka-data: 启动： docker compose up -d docker compose logs -f kafka version: "3.8": 使用 Compose 文件规范 3.8 版本。 services: 定义要运行的服务集合。 kafka: 服务名（同时也是默认的内部 DNS 名称）。 image: bitnami/kafka:4.0.0: 使用 Bitnami 的 Kafka 4.0.0 镜像（KRaft 模式支持）。 container_name: kafka: 指定容器名为 kafka（便于管理）。 ports: "9092:9092": 将宿主机 9092 暴露到容器 9092（客户端用 9092 连接 Kafka）。未暴露 9093，因为控制面只在容器网络内通信。 environment: Kafka 配置（通过环境变量注入） KAFKA_ENABLE_KRAFT=yes: 启用 KRaft 模式（不使用 Zookeeper）。 KAFKA_KRAFT_CLUSTER_ID=...: KRaft 集群 ID，需固定不变（初始化生成一次即可复用）。 KAFKA_CFG_NODE_ID=1: 当前节点 ID（单节点可为 1）。 KAFKA_CFG_PROCESS_ROLES=broker,controller: 同一进程同时扮演 broker 与 controller。 KAFKA_CFG_LISTENERS=PLAINTEXT://0.0.0.0:9092,CONTROLLER://:9093: 定义监听端口 PLAINTEXT://0.0.0.0:9092：客户端监听在所有网卡 9092。 CONTROLLER://:9093：控制面监听在 9093（对容器网络可见）。 KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.10.200:9092: 对客户端“宣告”的地址，客户端拿到元数据后按此地址回连；需填宿主机可达的 IP/域名与端口。 KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT: 将自定义监听名映射到安全协议（此处均为明文，无 TLS/SASL）。 KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER: 控制面使用名为 CONTROLLER 的监听器。 KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka:9093: KRaft 控制器投票者列表（节点 ID@地址）；单节点为 1@kafka:9093，其中 kafka 为 Compose 内部主机名。 KAFKA_CFG_LOG_DIRS=/bitnami/kafka/data: Kafka 数据目录（分区/段文件等）在容器内的…

Jenkins Pipeline
type: item
date: 2024-02-27T03:26:00+00:00
description: 一、简介 1.1、流水线 所谓的流水线，其实就是将之前的一个任务或者一个脚本就做完的事情，划分为多个子任务，然后分别执行，他们两者实现的最终效果是一样的，但是由于原始任务划分为多个子任务之后，以流水线的方式来执行，可以随时看任意子任务的执行效果，即使在某个阶段出现问题，我们也可以随时直接定位问题的发生点，大大提高项目的效率。 Pipeline 就是一套运行于Jenkins上的工作流框架，将原本独立运行于单个或者多个节点的任务连接起来，实现单个任务难以完成的复杂流程编排与可视化。 Pipeline 作为 Jenkins2.X 的最核心的特性，提供了一组可扩展的工具，通过 Pipeline Domain Specific Language（DSL）syntax 可以达到 Pipeline as Code 的目的，帮助 Jenkins 实现从 CI 到 CD 与 DevOps 的转变。 1.2、简单的项目发布流水线样式 这个漂亮的展示界面是 pipeline 配套的 BlueOcean 插件的功能。 1.3、功能特性 代码实现：以代码的形式实现，不仅可以被纳入版本控制，还可以通过编辑代码实现目标效果。 可持续性：任务的执行，不受jenkins等其他环境的限制。 操作灵活：子任务可以随意终止和继续 多功能：支持复杂CD要求，包括fork/join子进程，循环和并行执行工作的能力 可扩展：支持DSL的自定义扩展以及与其他插件集成。 自由风格借助于 Build Trigger 中的 Block xxx is building 或者 Post-build Action 中的 Build other projects 属性将多个独立的巨型任务关联在一起，逻辑复杂(并行|级联依赖)场景下不太适用。 pipeline 风格以一个任务的方式来实现，将各种我们能想到的任意复杂场景进行合理的组合。它不仅仅可以以 web 页面的方式进行定制化配置，还可以直接以 Jenkinsfile 的方式来实现。不过，无论哪种方式，其核心都是大量的脚本代码的正常运行，而且在 web 界面定制的脚本格式与 Jenkinsfile 中的脚本格式一致。通常认为最佳实践是在 Jenkinsfile Jenkins 中直接从源代码控制中加载 Pipeline。 二、Pipeline 插件 Pipeline 插件是 Jenkins 中用于创建和管理流水线的核心插件，它提供了一种强大而灵活的方式来定义整个软件开发过程中的构建、测试和部署流程。 2.1、插件安装 Pipeline 插件是 Jenkins 的默认安装插件之一，通常在安装 Jenkins 后就会自动包含。如果你的 Jenkins 没有安装 Pipeline 插件，可以通过 Jenkins 管理界面的插件管理功能进行安装。 2.2、Pipeline DSL Pipeline 插件引入了一种名为 Pipeline DSL（Domain-Specific Language）的脚本语言，它是基于 Groovy 语言的，并提供了一系列关键字和语法来定义流水线的各个阶段和任务。Pipeline DSL 主要包括以下几个核心概念： pipeline：定义整个流水线的入口，包括流水线的名称、参数、触发条件等信息。 stage：定义流水线的一个阶段，包括阶段的名称、任务、并行执行等信息。 step：定义流水线的一个任务，可以是构建、测试、部署等操作。 node：指定流水线的执行节点，可以是 Jenkins 主节点或者代理节点。 agent：指定流水线的代理节点，即流水线的执行环境。 parameters：定义流水线的参数，可以在流水线执行时传入不同的参数值。 2.3、Pipeline 编写 编写 Pipeline 脚本通常分为以下几个步骤： 定义流水线：使用 pipeline 关键字定义流水线，并设置流水线的参数和触发条件。 定义阶段：使用 stage 关键字定义流水线的各个阶段，并设置阶段的名称和任务。 编写任务：在每个阶段中使用 steps 或其他任务相关的关键字来编写具体的任务脚本，如构建、测试、部署等。 设置代理节点：如果需要在特定的节点上执行任务，可以使用 agent 或 node 关键字来设置执行节点。 参数化：如果流水线需要接受外部参数，可以使用 parameters 关键字定义参数列表，并在流水线执行时传入参数值。 2.4、示例 下面是一个简单的 Pipeline 脚本示例，演示了一个简单的构建和测试流水线： pipeline { agent any stages { stage('Build') { steps { sh 'mvn clean package' } } stage('Test') { steps { sh…

Docker Machine
type: item
date: 2024-02-24T06:37:00+00:00
description: 一、简介 Docker Machine 是Docker官方编排项目之一，使用go语言编写的，使用不同引擎在多种平台上快速的安装Docker环境。 Docker Machine 是一个工具，它允许你在虚拟宿主机上安装Docker，并使用docker-machine命令管理这个宿主机，可以使用Docker Machine在本地的MAC或者windows box、公司网络，数据中心或者AWS这样的云提供商上创建docker。 使用docker-machine命令，可以启动、审查、停止、重启托管的docker 也可以升级Docker客户端和守护程序并配置docker客户端和宿主机通信。 Docker Machine 也可以集中管理所以得docker主机。 二、为什么要使用 Docker Machine Docker Machine 使你能够在各种 Linux 上配置多个远程 Docker 宿主机。 此外，Machine 允许你在较早的 Mac 或 Windows 系统上运行 Docker，如上一主题所述。 Docker Engine Linux 系统上原生地运行。如果你有一个 Linux 作为你的主系统，并且想要运行 docker 命令，所有你需要做的就是下载并安装 Docker Engine 。然而，如果你想要在网络上、云中甚至本地配置多个 Docker 宿主机有一个有效的方式，你需要 Docker Machine。 无论你的主系统是 Mac、Windows 还是 Linux，你都可以在其上安装 Docker Machine，并使用 docker-machine 命令来配置和管理大量的 Docker 宿主机。它会自动创建宿主机、在其上安装 Docker Engine 、然后配置 docker 客户端。每个被管理的宿主机（“machine”）是 Docker 宿主机和配置好的客户端的结合 三、Docker和Docker Machine之间的区别 当人们说“Docker”时，他们通常是指 Docker Engine，它是一个客户端 - 服务器应用程序，由 Docker 守护进程、一个REST API指定与守护进程交互的接口、和一个命令行接口（CLI）与守护进程通信（通过封装REST API）。Docker Engine 从 CLI 中接受docker 命令，例如 docker run 、docker ps 来列出正在运行的容器、docker images 来列出镜像，等等。 Docker Machine 是一个用于配置和管理你的宿主机（上面具有 Docker Engine 的主机）的工具。通常，你在你的本地系统上安装 Docker Machine。Docker Machine有自己的命令行客户端 docker-machine 和 Docker Engine 客户端 docker。你可以使用 Machine 在一个或多个虚拟系统上安装 Docker Engine。 这些虚拟系统可以是本地的（就像你在 Mac 或 Windows 上使用 Machine 在 VirtualBox 中安装和运行 Docker Engine 一样）或远程的（就像你使用 Machine 在云提供商上 provision Dockerized 宿主机一样）。Dockerized 宿主机本身可以认为是，且有时就称为，被管理的“machines”。 四、安装 Docker Mechine 可以在多种平台上安装使用，包括Linux 、MacOS已经windows Docker Mechine 安装非常的简单：GitHub 地址:Releases。 安装 Docker Mechine： curl -L https://github.com/docker/machine/releases/download/v0.15.0/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && chmod +x /tmp/docker-machine && sudo cp /tmp/docker-machine /usr/local/bin/docker-machine 查看版本确认是否安装成功： docker-machine -v 五、常用命令参数 active 查看当前激活状态的Docker主机 config 查看当前激活状态Docker主机的连接信息 creat 创建Docker主机 env 显示连接到某个主机需要的环境变量 inspect 以json格式输出指定Docker的详细信息 ip 获取指定Docker主机的地址 kill 直接杀死指定的Docker主机 ls 列出所有的管理主机 provision 重新配置…

Docker Swarm
type: item
date: 2024-02-21T03:30:00+00:00
description: 一、前言 Swarm 是 Docker 公司推出的用来管理 docker 集群的平台，几乎全部用 GO 语言来完成的开发的，代码开源：https://github.com/docker/swarm Docker Swarm 和 Docker Compose 一样，都是 Docker 官方容器编排项目，但不同的是，Docker Compose 是一个在单个服务器或主机上创建多个容器的工具，而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务，对于微服务的部署，显然 Docker Swarm 会更加适合。从 Docker 1.12.0 版本开始，Docker Swarm 已经包含在 Docker 引擎中（docker swarm），并且已经内置了服务发现工具，就不需要像之前一样，再配置 Etcd 或者 Consul 来进行服务发现配置了。 上图可以看出，Swarm 是典型的 master-slave 结构，通过发现服务来选举 manager。manager 是中心管理节点，各个 node 上运行 agent 接受 manager 的统一管理，集群会自动通过 Raft 协议分布式选举出 manager 节点，无需额外的发现服务支持，避免了单点的瓶颈问题，同时也内置了 DNS 的负载均衡和对外部负载均衡机制的集成支持。 二、Docker Swarm 工作原理 2.1、Docker Engine client 通过 docker service create 命令去创建一个服务。 2.2、swarm manager API 这个请求直接由 Swarm manager 的 API 进行接收，接收命令并创建服务对象。 orchestrator 为服务创建一个任务。 allocater 为这个任务分配 IP 地址。 dispatcher 将任务分配到指定的节点。 scheduler 再该节点中下发指定命令。 2.3、worker node：接收manager任务后去运行这个任务 container 创建相应的容器。 worker 连接到调度程序以检查分配的任务。 executor 执行分配给工作节点的任务。 三、Swarm 重要概念 Swarm 集群的管理和编排是使用嵌入 docker 引擎的 SwarmKit，可以在 docker 初始化时启动 swarm 模式或者加入已存在的 swarm。 Node 每一个 docker engin 都是一个node（节点），分为 manager 和worker。Manager节点还执行维护所需群集状态所需的编排和集群管理功能。Work节点接收并执行从管理器节点分派的任务。 Service 一个服务是任务的定义，管理机或工作节点上执行。它是群体系统的中心结构，是用户与群体交互的主要根源。创建服务时，需要指定要使用的容器镜像。 Task 任务是在 docekr 容器中执行的命令，Manager 节点根据指定数量的任务副本分配任务给 worker 节点。一个任务包含了一个容器及其运行的命令。task 是 service 的执行实体，task 启动 docker 容器并在容器中执行任务。 3.1、Swarm 命令行说明 docker swarm 集群管理，子命令有 init, join, leave, update。（docker swarm --help查看帮助）； 执行集群的管理功能，维护集群的状态，选举一个 leader 节点去执行调度任务。 init #初始化集群 join #将节点加入集群 join-token #管理加入令牌 leave #从集群中删除某个节点，强制删除加参数--force update #更新集群 unlock #解锁集群 docker node 节点管理，子命令有 accept, promote, demote, inspect, update, tasks, ls, rm。（docker node --help 查看帮助） 接收和执行任务。参与容器集群负载调度，仅用于承载 task。 demote #将集群中一个或多个节点降级 inspect #显示一个或多个节点的详细信息 ls #列出集群中的节点 promote #将一个或多个节点提升为管理节点 rm #从集群中删除停止的节点，--force强制删除参数 ps #列出一个或多个节点上运行的任务 update #更新节点 docker service 服务创建，子命令有 create, inspect, update, remove, tasks。（docker service--help 查看帮助） 一个服务是 work 节点上执行任务的定义。创建一个服务，指定了容器所使用的镜像和容器运行的命令。 cre…

Harbor
type: item
date: 2024-02-19T09:41:00+00:00
description: 一、Harbor 简介 1.1、简介 Harbor 是 VMware 公司开源的企业级 Docker Registry 项目，其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。 Harbor 以 Docker 公司开源的 Registry 为基础，提供了图形管理 UI 、基于角色的访问控制(Role Based AccessControl) 、AD/LDAP 集成、以及审计日志(Auditlogging) 等企业用户需求的功能，同时还原生支持中文。 Harbor 的每个组件都是以 Docker 容器的形式构建的，使用 docker-compose 来对它进行部署。用于部署 Harbor 的 docker-compose 模板位于 harbor/docker-compose.yml。 1.2、Harbor 的特性 1、基于角色控制：用户和仓库都是基于项目进行组织的，而用户在项目中可以拥有不同的权限。 2、基于镜像的复制策略：镜像可以在多个 Harbor 实例之间进行复制（同步）。 3、支持 LDAP/AD：Harbor 可以集成企业内部已有的 AD/LDAP（类似数据库的一张表），用于对已经存在的用户认证和管理。 4、镜像删除和垃圾回收：镜像可以被删除，也可以回收镜像占用的空间。 5、图形化用户界面：用户可以通过浏览器来浏览，搜索镜像仓库以及对项目进行管理。 6、审计管理：所有针对镜 像仓库的操作都可以被记录追溯，用于审计管理。 7、支持 RESTful API：RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。 8、Harbor 和 docker registry 的关系：Harbor 实质上是对 docker registry 做了封装，扩展了自己的业务模板。 1.3、Harbor的构成 Harbor 在架构上主要有 Proxy、Registry、Core services、Database（Harbor-db）、Log collector（Harbor-log）、Job services 六个组件。 Docker Harbor 私有仓库操作的过程： 1、所有的请求或认为的操作都会首先交给 proxy（反向代理）。 2、proxy 会先将请求转发给后端Core services，Core services 中包含 UI、token（身份验证服务）、webhook（网站的一些服务功能）。 3、转发给registry（镜像存储），若需要下载镜像等权限操作，需要通过 Core services 中的 token 令牌的身份验证服务才行。 4、每一次下载和上传都产生操作记录，生成日志，保存至 database 中。 5、database 记录保存镜像的元信息及用户与组的身份信息，通过验证授权才能允许相关操作。 Proxy: 是一个 nginx 的前端代理，Harbor 的 Registry、UI、Token 服务等组件，都处在 nginx 反向代理后边。 该代理将来自浏览器、docker clients 的请求转发到后端不同的服务上。 Registry: 负责储存 Docker 镜像，并处理 Docker push/pull 命令。由于要对用户进行访问控制，即不同用户对 Docker 镜像 有不同的读写权限，Registry 会指向一个 Token 服务，强制用户的每次 Docker pull/push 请求都要携带一个合法的 Token， Registry 会通过公钥对 Token 进行解密验证。 Core services: Harbor的核心功能， UI（harbor-ui）: 提供图形化界面，帮助用户管理 Registry 上的镜像（image）, 并对用户进行授权。 WebHook：为了及时获取Registry上image 状态变化的情况，在Registry 上配置 Webhook，把状态变化传递给 UI 模块。 Token 服务：负责根据用户权限给每个 Docker push/pull 命令签发 Token。Docker 客户端向 Registry 服务发起的请求， 如果不包含 Token，会被重定向到 Token 服务，获得 Token 后再重新向 Registry 进行请求。 Database（harbor-db）：为core services提供数据库服务，负责储存用户权限、审计日志、Docker 镜像分组信息等数据。 Job services: 主要用于镜像复制，本地镜像可以被同步到远程 Harbor 实例上。 Log collector（harbor-log）: 负责收集其他组件的日志到一个地方。 二、部署Harbor 2.1、部署…

Jenkins Github 项目部署
type: item
date: 2024-02-18T13:59:00+00:00
description: 一、初始化环境 在节点安装必要的软件环境： JDK 11 及以上 | Linux - JDK 安装 Maven | Linux - Maven 安装 Git | Linux - Git 安装 二、系统配置 System Configuration 2.1、Credentials Dashboard > Manage Jenkins > Credentials 2.2、Tools Dashboard > Manage Jenkins > Tools JDK： Git： 2.3、System Dashboard > Manage Jenkins > System GitHub： 三、Freestyle Project 3.1、General 3.2、源码管理 3.3、Triggers 3.4、Environment 3.5、Build Steps pkill -f jenkins_demo-1.0-SNAPSHOT.jar || true cd target pwd source /etc/profile BUILD_ID=dontKillMe nohup java -jar jenkins_demo-1.0-SNAPSHOT.jar > /usr/local/nohup.out 2>&1 & 3.6、构建后操作 四、使用 nohup 构建失败 通过 jenkins 执行 shell 脚本时，脚本中是通过 nohup java -jar xxx.jar & 的方式启动，显示执行成功，但是服务却没启动，脚本如下： nohup java -jar xxx.jar & 4.1、原因 jenkins 默认会在构建完成后，杀掉构建过程中由 shell 命令触发的衍生进程。 jenkins 根据 BUILD_ID 识别某个进程是否为构建过程的衍生进程，故修改 BUILD_ID 后，jenkins 就无法识别是否为衍生进程，则此进程能在后台保留运行。 结论就是 Jenkins 程序只负责运行伪命令行 nuhup 命令，并不保证是否成功运行 nuhup 后面的命令。 4.2、解决 1、使用 BUILD_ID=xxx ，其中 xxx 可以是任意内容（只要不是原来的BUILD_ID内容即可），同时需要把 nohup 输出内容重定向到文件里面，如 /usr/local/nohup.out。 BUILD_ID=dontKillMe nohup java -jar jenkins_demo-1.0-SNAPSHOT.jar > /usr/local/nohup.out 2>&1 & 2、使用 at now 代替 nohup 命令。 #so "at now" will run even if java -jar fails set +e #Run java app in background echo "java -jar jenkins_demo-1.0-SNAPSHOT.jar > /usr/local/nohup.out 2>&1 &" | at now set -e 执行的时候如果出现了返回值为非零，整个脚本就会立即退出。 set +e 执行的时候如果出现了返回值为非零将会继续执行下面的脚本。 五、开启 Webhooks 监听 git 提交自动构建： github 项目开启钩子： 现有项目的 webhooks 选项，Payload URL：jekins地址/github-webhook/。

Linux - Git 安装
type: item
date: 2024-02-18T08:24:00+00:00
description: 一、下载 git官网 有两种安装方法第一种，yum 安装，直接输入一行命令就可以进行安装了。 yum install git 输入 git --version 查看 Git 是否安装完成以及查看其版本号 1.8.3.1(不建议)。 默认安装位置：/usr/libexec/git-core。 卸载：yum remove git。 二、安装 将下载的安装包，上传到 /opt/software，解压： tar -zxvf git-2.34.1.tar.gz -C /opt/module/git 安装编译环境： yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker 编译源码，prefix 里面填你想要放的文件夹位置： make prefix=/opt/module/git all 安装 git： make prefix=/opt/module/git install 配置环境变量： vim /etc/profile export GIT_HOME=/opt/git export PATH=$GIT_HOME/bin:$PATH source /etc/profile 查看安装的版本： git --version 查看 git 命令位置： whereis git 参考： Windows安装Git

Jenkins 下载&安装
type: item
date: 2024-02-17T05:56:00+00:00
description: 一、简介 Jenkins 是一个开源的持续集成（CI）工具，用于自动化构建、测试和部署软件项目。它提供了一个易于使用和可扩展的平台，帮助团队更高效地开发和交付软件。 官网 中文文档 二、安装前准备 Jenkins 的入门指南 Jenkins 对机器的要求是至少要 256 MB 的内存，还需要安装 Java。 可以 java -version 命令来检查是否已经安装了 Java。 如何在 Linux 上安装 Java。 使用 Jenkins 在 Linux 上构建 Java 项目，可先安装一下 maven，可参考：Linux-安装 maven。 三、下载与安装 进入 Jenkins 的 官方下载页面。 LTS 是长期支持的版本，是稳定的版本。 在下载安装包之前要先确定应该下载哪个版本的 Jenkins，Jenkins 的版本依赖于 Java 的版本，可在 Jenkins-Java Support Policy 中进行查看。 1、上传文件至 /opt/software 目录下。 2、创建启动脚本。 touch start-jenkins.sh echo "nohup java -jar /opt/software/jenkins.war --httpPort=8080 >./jenkins.log 2>&1 &" > start-jenkins.sh chmod -R 777 ./start-jenkins.sh 3、启动 jenkins，bash start-jenkins.sh。 查看日志：tail -f jenkins.log。 4、访问并初始化 Jenkins（需要服务器能从公网访问） 注意：防火墙请开启 8080 端口。 如果是阿里云服务器，需要在安全组内开放 8080 端口的访问权限。 四、常用插件 JDK Parameter Plugin JDK 版本控制器，用于管理多个版本 JDK 环境。 Maven Integration Maven 项目构建。 Git Parameter Plug-In 参数化构建插件。 Redeploy Rancher2.x Workload Plugin 触发镜像自动部署 rancher。 CloudBees Docker Build and PublishVersion 打包镜像并推送镜像仓库。 Docker Pipeline 构建 docker 流水线。 GitLab gitlab 触发自动构建插件，GitLab 插件允许您使用 WebHooks 从 GitLab 调用管道，并将构建结果发布回 GitLab。 Version Number 版本号自定义管理。 Material Theme jenkins 主题。 Job Configuration History Plugin jenkins 配置管理。 Role-based Authorization Strategy Jenkins 用户视图权限管理插件。 Timestamper 将时间戳添加到控制台输出。 HTML Publisher plugin html 报告。 Allure Jenkins Plugin Allure 报告。 Publish Over SSH ssh 管理，通过 ssh 发布到远程的服务器。 NodeJS Plugin vue 项目所需 nodejs 环境管理。 Pipeline 流水线管理。 Veinmind Jenkins 镜像扫描（有些许问题）。 Blue Ocean Jenkins 现代和直观用户界面，提供了 CI/CD 流水线的可视化表示。 DingTalk 钉钉通知插件。 Git Parameter Plug-In Git Parameter 插件允许您将 Git branches、tags 或 revisions 作为启动作业或管道的参数。 Branch API Plugin 分支管理。 Credentials Binding Plugin Credentials Plugin Plain Credentials Plugin SSH Credentials Plugin Authentication Tokens API Plugin 凭据管理。 Resource Disposer Plugin 资源清理。 Variant Plugin 变量管理。 Workspace Cleanup Plugin 工作空间清理。

Keepalived
type: item
date: 2024-01-25T16:37:00+00:00
description: 一、Keepalived 介绍 Keepalived 是 Linux 下一个轻量级别的高可用解决方案，通过虚拟路由冗余协议来实现服务或者网络的高可用。 起初是为 LVS 设计的，专门用来监控集群系统中各个服务节点的状态。 如果某个服务器节点出现故障，Keepalived 将检测到后自动将节点从集群系统中剔除。 而在故障节点恢复正常后，Keepalived 又可以自动将此节点重新加入集群中。 这些工作自动完成，不需要人工干预，需要人工完成的只是修复出现故障的节点。 1.1、特点： 1、部署简单，只需要配置一个配置文件即可。 2、加入了虚拟路由冗余协议，可以保证业务或网络不间断稳定运行。 1.2、核心功能： 1.2.1、健康检查 采用 tcp 三次握手，icmp 请求，http 请求，udp、echo 请求等方式对负载均衡器后面的实际的服务器 (通常是承载真实业务的服务器) 进行保活。 1.2.2、故障切换 主要应用在配置了主备的服务器上，使用虚拟路由冗余协议维持主备之间的心跳。 当主服务器出现问题时，由备服务器承载对应的业务，从而在最大限度上减少损失，并提供服务的稳定性。 1.3、VRRP 协议 在现实的网络环境中，主机之间的通信都是通过配置静态路由（默认网关）来完成的。 而主机之间的路由器一旦出现故障，就会通信失败。 因此在这种通信模式下，路由器就会有单点瓶颈问题，为了解决这个问题，引入了 VRRP 协议（虚拟路由冗余协议）。 通过 VRRP 可以在网络发生故障时透明的进行设备切换而不影响主机之间的数据通信。 VRRP 可以将两台或多台物理路由器设备虚拟成一个虚拟路由器，这个虚拟路由器通过虚拟 IP（一个或多个）对外提供服务，而在虚拟路由器内部是多个物理路由器协同工作，VRRP 角色如下： 1.3.1、角色 虚拟路由器：VRRP 组中所有的路由器，拥有虚拟的 IP+MAC (00-00-5e-00-01-VRID) 地址。 主路由器（master）：虚拟路由器内部通常只有一台物理路由器对外提供服务，主路由器是由选举算法产生，对外提供各种网络功能。 备份路由器（backup）：VRRP 组中除主路由器之外的所有路由器，不对外提供任何服务，只接受主路由的通告，当主路由器挂掉之后，重新进行选举算法接替 master 路由器。 master 路由器由选举算法产生，它拥有对外服务的 VIP，提供各种网络服务，如 ARP 请求、数据转发、ICMP 等等，而 backup 路由器不拥有 VIP，也不对外提供网络服务。 当 master 发生故障时，backup 将重新进行选举，产生一个新的 master 继续对外提供服务。 1.3.2、VRRP 工作模式 VRRP 有三种工作状态，分别是： Initialize 状态 Master 状态 Backup 状态 选举机制: 抢占模式：一旦有优先级高的路由器加入，立即成为 Master。 非抢占模式：只要 Master 不挂掉，优先级高的路由器只能等待。 二、Keepalived 原理 keepalived 工作在 TCP/IP 参考模型的第三、四和第五层，也就是网络层、传输层和应用层。 网络层：通过 ICMP 协议向集群每个节点发送一个 ICMP 数据包（类似于 ping 功能），如果某个节点没有返回响应数据包，那么认定此节点发生了故障，Keepalived 将报告此节点失效，并从集群中剔除故障节点。 传输层：通过 TCP 协议的端口连接和扫描技术来判断集群节点是否正常，keepalived 一旦在传输层探测到这些端口没有响应数据返回，就认为这些端口所对应的节点发生故障，从集群中剔除故障节点。 应用层：用户可以通过编写程序脚本来运行 keepalived，keepalived 根据脚本来检测各种程序或者服务是否正常，如果检测到有故障，则把对应的服务从服务器中删除。 2.1、组件架构 我们将整个体系结构分层用户层和内核层： Scheduler I/O Multiplexer I/O 复用分发调用器，负责安排 Keepalived 所有的内部的任务请求 Memory Management 内存管理机制，提供了访问内存的一下通用方法 Keepalived Control Plane 控制面板，实现对配置文件的编译和解析，Keepalived 的配置文件解析比较特殊，它并不是一次解析所有模块的配置，而是只有在用到某模块时才解析相应的配置 Core components Keepalived 的核心组件，包含了一系列功能模块，主要有 watch dog、Checkers、VRRP Stack、IPVS wrapper、Netlink Reflector。 watch dog 一个极为简单又非常有效的检测工…