DevOps-Jenkins
Jenkins
Jenkins是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
官网

应用场景
场景一
- 研发人员上传开发好的代码到github代码仓库
- 需要将代码下载nginx服务器部署
- 手动下载再部署/使用脚本下载在部署
场景二

下载



安装
- 静态IP(可以上外网)
- 主机名
- 关闭防火墙,SeLinux(脚本执行)
#!/bin/bash# 关闭防火墙
echo "正在关闭防火墙..."
sudo systemctl stop firewalld
sudo systemctl disable firewalld
echo "防火墙已关闭并禁用。"# 检查 SELinux 状态
sestatus=$(sestatus | grep "SELinux status" | awk '{print $3}')if [ "$sestatus" == "enabled" ]; then# 关闭 SELinuxecho "正在关闭 SELinux..."sudo setenforce 0sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/configecho "SELinux 已关闭。"
elseecho "SELinux 已经处于禁用状态,无需操作。"
fiecho "脚本执行完毕。"
- 时间同步
- 确定OpenJdk安装
yum install java-1.8.0-openjdk* -y
- 查看JDK版本
[root@workstation ~]# java -version
openjdk version "1.8.0_372"
OpenJDK Runtime Environment (build 1.8.0_372-b07)
OpenJDK 64-Bit Server VM (build 25.372-b07, mixed mode)
- 上传 rpm包安装
[root@workstation ~]# rpm -ivh jenkins-2.150.3-1.1.noarch.rpm
warning: jenkins-2.150.3-1.1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID d50582e6: NOKEY
Preparing... ################################# [100%]
Updating / installing...1:jenkins-2.150.3-1.1 ################################# [100%]
- 启动服务,查看端口
[root@workstation ~]# systemctl start jenkins
[root@workstation ~]# systemctl enable jenkins
jenkins.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig jenkins on[root@workstation ~]# ps -aux | grep 8080
jenkins 7687 80.3 25.7 2359788 256212 ? Ssl 09:49 0:32 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
root 7760 0.0 0.0 112708 972 pts/0 R+ 09:50 0:00 grep --color=auto 8080
- 查看密码文件里的密码(此为初始管理员用户admin的密码)。通过浏览器访问填上密码(服务器IP+端口8080)
[root@workstation ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
7c1491b0219849f981255179e9981bba

- 选择安装推荐插件



- 进入主界面

退出登录后密码问题
退出后,再次登录使用admin用户, 密码为cat /var/lib/jenkins/secrets/initialAdminPassword得到的字符串
如果需要修改密码


Git+GitHub+Jenkins

开发者电脑准备
yum install git -y
- 创建密钥对
[root@servera ~]# ssh-keygen -t rsa -f /root/.ssh/id_rsa -C "root@servera" -N ""
- 在开发者电脑上查看并复制公钥
[root@servera ~]# cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDOHXkXsoYB1JtMJtXBeZrtcqsRRKBJEAzxGCoUyGM0B7SQYBQXaes4xTtQjOjJkL5HWQdaSelGGA8ySRjKuseIdYsPPcG5kxARkJ1+C6jJp3MamzuxJCjo2n3hmmopfB4f2eE3Kn5kbAUcmJRJfjUCgufsFjuY836Np9HNLqqYOuZCAKJEQm/IMTJgZ13aq/ss6VcA/+IikX4d/+PDsgYdNYSL8IxKiThfNlv3NIdOqNxAz2q4mFg2Vj9o1hvfnqGDIxuXyDGjVLZAW6bvJliJvJs3MfD7f4tn8gyFlArxPT0tMS7ePbxGBCBj2XC8qW9lcmrXD2163pbP/N6Io+CT root@servera
- 将密钥公钥添加到github

GitHub新建仓库


开发者提交文件测试
- 免密登录地址
git@github.com:rkun0068/jenkins.git
- 开发者电脑设置开发者身份
[root@servera ~]# git config --global user.name "servera"
[root@servera ~]# git config --global user.email "rkun18@outlook.com"
- 克隆项目到开发者本地电脑上
[root@servera ~]# git clone git@github.com:rkun0068/jenkins.git
- 提交测试代码
[root@servera ~]# cd jenkins/
[root@servera jenkins]# echo "Jenkins Test " >> README.md
[root@servera jenkins]# git add README.md
[root@servera jenkins]# git commit -m "add README.md"
[master (root-commit) eb74eb9] add README.md1 file changed, 1 insertion(+)create mode 100644 README.md
[root@servera jenkins]# git branch
* master
[root@servera jenkins]# git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 228 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: To git@github.com:rkun0068/jenkins.git* [new branch] master -> master
Branch master set up to track remote branch master from origin.
- 验证

Nginx服务器准备
在Nginx服务器上安装Nginx,并启动服务
yum install epel-releaseyum install nginx -ysystemctl start nginxsystemctl enable nginx
Jenkins安装插件
Jenkins图形确认安装git plugin和publish over ssh插件



配置jenkins通过Publish Over SSH免密连接Nginx
- 在jenkins服务器生产空密码 密钥对
[root@workstation ~]# ssh-keygen -t rsa -f /root/.ssh/id_rsa -C "root@workstation" -N ""
- 查看并复制私钥
[root@workstation ~]# cat ~/.ssh/id_rsa
- 在jenkins中添加私钥


点击Add,添加服务器配置 - 在Jenkins服务器上配置对Nginx服务器的免密登录
#填上Nginx服务器IP地址
[root@workstation ~]# ssh-copy-id -i 192.168.182.132
- 填写Nginx配置信息,测试连接成功后保存

添加Jenkins服务器公钥到GitHub

为Jenkins服务器添加凭据
凭据使Jenkins给字节构建项目授权使用的。
此文章中Jenkins通过SSH免密去找GitHub的项目仓库clone或pull项目代码。
但Jenkins服务本身不允许使用自己的私钥访问GitHub公钥,给凭据,让它可以实现功能就可以。
凭据是一种和第三方程序通讯的权限授权。本案例的凭据就是允许使用SSH免密。
可以使凭据在Jenkins里授权给任何需要SSH免密通讯的构建项目。
- Jenkins界面添加凭据




- 添加凭据信息


Jenkins任务创建
- 创建新任务

- 自定义任务名称与风格


- 定义源码管理(如果URL错误,有可能使Jenkins服务器没有安装Git,Git安装即可)

- 自定义构建方法和目标主机目录



手动构建
- 立即构建

- 查看



- 查看控制台输出信息

- Nginx服务器验证是否被上传到Nginx家目录
[root@serverb ~]# ls /usr/share/nginx/html/
404.html 50x.html en-US icons img index.html nginx-logo.png poweredby.png README.md
#可以看到README.md被传过来了
自动发布系统

GitLab上创建新仓库


- 开发者电脑clone创建好的项目
[root@servera ~]# git clone git@192.168.182.133:root/auto_build_web.git[root@servera ~]# cd auto_build_web/
[root@servera auto_build_web]#
- 开发者要产生ssh空密码密钥对,把公钥添加到gitlab
Jenkins安装对应插件

添加Jenkins服务器公钥到GitLab
- Jenkins产生root用户SSH空密码密钥对
- 添加公钥到GitLab
- 复制GitLab上自动发布项目地址
- 在Jenkins服务器上克隆仓库,确认连接OK
[root@workstation ~]# git clone git@192.168.182.133:root/auto_build_web.git
Jenkins创建自动构建任务





执行此脚本的是Jenkins服务器上的Jenkins用户
#!/bin/bash#源目录为jenkins存放任务文件的目录
SOURCE_DIR=/var/lib/jenkins/workspace/$JOB_NAME/
#目标目录为nginx服务器的家目录
DEST_DIR=/usr/share/nginx/html
#使用rsync同步源到nginx服务器家目录(需要免密登录),IP为nginx服务器IP
/usr/bin/rsync -av --delete $SOURCE_DIR root@192.168.182.132:$DEST_DIR
配置Jenkins服务器上Jenkins用户
[root@workstation ~]# grep jenkins /etc/passwd
jenkins:x:997:995:Jenkins Automation Server:/var/lib/jenkins:/bin/false
[root@workstation ~]# usermod -s /bin/bash jenkins
[root@workstation ~]# grep jenkins /etc/passwd
jenkins:x:997:995:Jenkins Automation Server:/var/lib/jenkins:/bin/bash[root@workstation ~]# su - jenkins
-bash-4.2$ ssh-keygen -t rsa -C "jenkins user" -N ""-bash-4.2$ ssh-copy-id -i root@192.168.182.132
Jenkins全局安全配置


配置GitLab运行本地网络使用WebHook




为GitLab自动构建项目添加Webhook




代码自动发布测试
- 开发者使用Git提交测试文件
[root@servera auto_build_web]# echo "auto_build_web" >> index.html
[root@servera auto_build_web]# git add index.html
[root@servera auto_build_web]# git commit -m "add index.html"
[master (root-commit) fddcaba] add index.html1 file changed, 1 insertion(+)create mode 100644 index.html
[root@servera auto_build_web]# git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 225 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)To git@192.168.182.133:root/auto_build_web.git* [new branch] master -> master
Branch master set up to track remote branch master from origin.
[root@serverb ~]# cat /usr/share/nginx/html/index.html
auto_build_web
如果出现构建失败的情况很可能是某个主机rsync没有安装
相关文章:
DevOps-Jenkins
Jenkins Jenkins是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 官网 应用场景 场景一 研发人员上传开发好的代码到github代码仓库需要将代码下载nginx服务器部署手动下载再…...
Jasper裁员,成也GPT,败也GPT
大家好! 我是老洪。 今天来聊一聊人工智能(artificial intelligence),简称AI。 当前的AI可谓是热火朝天, 自从ChatGPT发布以来,引起了广泛的关注和热情, 许多公司和研究者都试图将其应用于自己的产品或研究中。 按理说…...
安卓开发后台应用周期循环获取位置信息上报服务器
问题背景 最近有需求,在APP启动后,退到后台,还要能实现周期获取位置信息上报服务器,研究了一下实现方案。 问题分析 一、APP退到后台后网络请求实现 APP退到后台后,实现周期循环发送网络请求。目前尝试了两种方案是…...
为什么你的独立站有流量没转化?如何做诊断检查?
新店的创业初期,即使网站有流量,但是销售额为零的情况也常有发生。如果你确定流量是高质量的,寻找阻止潜在客户购买的具体因素可能会感到困难重重。 从“立即购买”按钮的色彩选择这样的细节,到构建品牌故事这样的大计划…...
【深度学习】【三维重建】windows10环境配置PyTorch3d详细教程
【深度学习】【三维重建】windows10环境配置PyTorch3d详细教程 文章目录 【深度学习】【三维重建】windows10环境配置PyTorch3d详细教程前言确定版本对应关系源码编译安装Pytorch3d总结 前言 本人windows10下使用【Code for Neural Reflectance Surfaces (NeRS)】算法时需要搭…...
【算法和数据结构】257、LeetCode二叉树的所有路径
文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:首先看这道题的输出结果,是前序遍历。然后需要找到从根节点到叶子节点的所有路径ÿ…...
yolov5的后处理解析
由于最近实习项目使用到了yolov5, 发现对yolov5的后处理部分不太熟悉,为防止忘记,这里简单做个记录。 在yolov5里,利用FPN特征金字塔,可以得到三个加强特征层,每一个特征层上每一个特征点存在3个先验框&am…...
Java中注解应用场景
1.Parameter注解 Parameter(names "-browser", description "browser name, supported scope [chrome]", required true) Param注解的用法解析_parameter_fFee-ops的博客-CSDN博客 Public User selectUser(param(“userName”) String name, param(“…...
verilog
数据类型 reg reg [3:0] counter; counter是一个寄存器,这个寄存器有4bit大小; reg [3:0] byte1 [7:0]; 有8个寄存器,每个4bit大小; wire 有符号整数 interge 无符号 reg clk_temp (小数)verilog中称实数…...
基于springboot+mybatis+vue进销存管理信息系统
基于springbootmybatisvue进销存管理信息系统 一、系统介绍二、功能展示1.个人中心2.企业信息管理3.商品信息管理4.客户信息管理5.入库记录管理6.出库记录管理7.出库记录管理8.操作日志管理9.库存盘点管理 四、获取源码 一、系统介绍 系统主要功能: 普通用户&#…...
Keepalived 在CentOS安装
下载 有两种下载方式,一种为yum源下载,另一种通过源代码下载,本文章使用源代码编译下载。 官网下载地址:https://www.keepalived.org/download.html wget https://www.keepalived.org/software/keepalived-2.0.20.tar.gz --no-…...
Lua语法学习
Lua 文章目录 Lua变量数据类型nilbooleanstringtable 循环if函数运算符Table -- Events local StateEvents ReplicatedStorage:WaitForChild("StateEvents"); local AddMoneyEvent StateEvents:WaitForChild("AddMoneyEvent");AddMoneyEvent:FireServer(…...
【Ajax】笔记-jsonp实现原理
JSONP JSONP是什么 JSONP(JSON With Padding),是一个非官方的跨域解决方案,纯粹凭借程序员的聪明才智开发出来的,只支持get请求。JSONP 怎么工作的? 在网页有一些标签天生具有跨域能力,比如:img link iframe script. …...
LLM - Chinese-Llama-2-7b 初体验
目录 一.引言 二.模型下载 三.快速测试 四.训练数据 五.总结 一.引言 自打 LLama-2 发布后就一直在等大佬们发布 LLama-2 的适配中文版,也是这几天蹲到了一版由 LinkSoul 发布的 Chinese-Llama-2-7b,其共发布了一个常规版本和一个 4-bit 的量化版本…...
transformer代码注解
其中代码均来自李沐老师的动手学pytorch中。 class PositionWiseFFN(nn.Module):ffn_num_inputs 4ffn_num_hiddens 4ffn_num_outputs 8def __init__(self,ffn_num_inputs,ffn_num_hiddens,ffn_num_outputs):super(PositionWiseFFN,self).__init__()self.dense1 nn.Linear(ffn…...
【产品经理】高阶产品如何处理需求?(3方法论+2案例+1清单)
不管你是萌新小白,还是工作了几年的“老油条”,需求一直是产品经理工作的重点。只不过,不同年限的产品经理需要面对的需求大有不同,对能力的要求更高。 不知你是否遇过以下问题? 你接手一个项目后,不知从何…...
Neo4j数据库中导入CSV示例数据
本文简要介绍Neo4j数据库以及如何从CSV文件中导入示例数据,方便我们快速学习测试图数据库。首先介绍简单数据模型以及基本图查询概念,然后通过LOAD CSV命令导入数据,生成节点和关系。 环境准备 读者可以快速安装Neo4j Desktop,启…...
第四章 No.1树状数组的原理与使用
文章目录 应用问题原理树状数组练习题241. 楼兰图腾242. 一个简单的整数问题243. 一个简单的整数问题2244. 谜一样的牛 线段树的反面:树状数组原理复杂,实现简单 应用问题 支持两个操作:快速求前缀和任意地修改某个数,时间复杂度…...
mysql(五)主从配置
目录 前言 一、MySQL Replication概述 二、MySQL复制类型 三、部署MySQL主从异步复制 总结 前言 为了实现MySQL的读写分离,可以使用MySQL官方提供的工具和技术,如MySQL Replication(复制)、MySQL Group Replication(组…...
扫地机语音提示芯片,智能家居语音交互首选方案,WT588F02B-8S
智能家居已经成为现代家庭不可或缺的一部分,而语音交互技术正是智能家居的核心。在智能家居设备中,扫地机无疑是最受欢迎的产品之一。然而,要实现一个更智能的扫地机,需要一颗语音提示芯片,以提供高质量的语音交互体验…...
从‘文件夹’到对象列表:手把手教你用MinIO Java Client实现灵活的文件查询与过滤
从‘文件夹’到对象列表:手把手教你用MinIO Java Client实现灵活的文件查询与过滤在当今数据驱动的时代,对象存储已成为现代应用架构中不可或缺的一部分。MinIO作为高性能、兼容S3协议的开源对象存储解决方案,凭借其轻量级和易用性赢得了众多…...
AI大模型应用开发全攻略:从入门到精通,掌握LLM、RAG、Agent核心技能!“
本文全面介绍了AI大模型应用开发的核心技术和实践。从大模型API交互基础,到关键参数Messages和Tools的作用,深入解析了RAG、ReAct、Agent等应用范式。文章还探讨了Fine-tuning微调和Prompt提示词工程的重要性,强调工程实践与业务需求相结合。…...
别再乱用npm install了!手把手教你用npx only-allow为项目指定包管理器(支持pnpm/yarn/npm)
用only-allow统一团队包管理器:从配置到CI的全流程指南 你是否曾经在拉取一个新项目后,面对npm install、yarn还是pnpm i的抉择感到困惑?或者更糟的是,团队成员混用不同包管理器导致node_modules结构不一致,引发各种诡…...
Visual Paradigm 17.0 团队协作新功能实测:手把手教你用项目模板和文件夹管理提效
Visual Paradigm 17.0 团队协作实战指南:从模板配置到文件夹管理的高效工作流在敏捷开发团队中,项目启动速度和资产管理的规范性往往直接影响整体效率。Visual Paradigm 17.0针对这一痛点推出的团队协作增强功能,特别是服务器端项目模板和文件…...
C语言双端队列完整实现:一行代码吃透头尾操作,算法效率拉满
一、为什么C语言实现双端队列,是数据结构的必学天花板?在C语言数据结构里,队列、栈都是基础中的基础,但真正能把灵活度、效率、内存管理三者揉到一起的,还得是双端队列(deque)。普通队列只能一头…...
【CP-05】RTE运行时环境 - SWC的操作系统接口
CP-05_RTE运行时环境【CP-05】RTE运行时环境 - SWC的“操作系统接口”前言在AUTOSAR架构中,RTE(Runtime Environment,运行时环境)是一个常被提及却难以理解的概念。它像是应用层软件组件(SW-C)与底层基础软…...
Wechat2RSS:微信公众号转RSS订阅工具
文章目录Wechat2RSS:微信公众号转RSS订阅工具Wechat2RSS:微信公众号转RSS订阅工具 ttttmr开源的Wechat2RSS项目,目前在GitHub上获得1409颗Star,项目地址为https://github.com/ttttmr/Wechat2RSS。该工具的核心作用是将微信公众号…...
Win10系统清理避坑指南:你的BAT脚本真的安全吗?盘点那些不能乱删的文件
Win10系统清理避坑指南:BAT脚本安全操作手册每次看到那些号称"一键清理系统垃圾"的BAT脚本在技术论坛被疯狂转发,我的工程师朋友老张就会忍不住摇头。上周他刚帮一位设计师修复了崩溃的Photoshop——原因正是某个清理脚本删除了Adobe的临时工作…...
Claude本地化部署终极方案(企业级容器化全栈手册):支持Anthropic API兼容、流式响应、模型热切换与RBAC权限隔离
更多请点击: https://codechina.net 第一章:Claude本地化部署的架构全景与企业级价值定位 Claude本地化部署并非简单地将模型权重下载后运行,而是一套融合推理引擎优化、安全沙箱隔离、API网关治理与可观测性集成的端到端架构体系。其核心目…...
CentOS服务器上VNC连接失败?手把手教你排查并修复个人端口问题(附重启命令)
CentOS服务器VNC连接故障深度排查指南:从原理到实战当你在深夜赶项目时,突然发现VNC连接不上服务器,那种焦虑感我深有体会。去年参与半导体器件仿真项目时,我也曾被这个问题困扰整整两天。本文将分享一套经过实战检验的排查方法论…...
