Skip to content

Commit

Permalink
Merge branch 'master' of github.com:fengzhao/fengzhao-notes
Browse files Browse the repository at this point in the history
  • Loading branch information
fengzhao committed Oct 15, 2024
2 parents e9c4c29 + 6167438 commit 6e95c18
Show file tree
Hide file tree
Showing 6 changed files with 144 additions and 68 deletions.
35 changes: 22 additions & 13 deletions DevOps/CICD.markdown
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
# CICD



- Continuous Integration (CI) 持续集成
- Continuous Delivery (CD) 持续交付
- Continuous Deployment (CD) 持续部署



持续集成的工作原理是将小的代码块推送到 Git 仓库中托管的应用程序代码库中。
**持续集成**的工作原理是将小的代码块推送到 Git 仓库中托管的应用程序代码库中。

并且每次推送时,都要运行一系列脚本来构建、测试和验证代码更改,然后再将其合并到主分支中。

Expand All @@ -18,7 +16,7 @@

这些方法使得可以在开发周期的早期发现 bugs 和 errors ,从而确保部署到生产环境的所有代码都符合为应用程序建立的代码标准。

GitLab CI/CD 由一个名为 .gitlab-ci.yml 的文件进行配置,改文件位于仓库的根目录下。文件中指定的脚本由 GitLab Runner 执行。
GitLab CI/CD 由一个名为 .gitlab-ci.yml 的文件进行配置,该文件位于仓库的根目录下。文件中指定的脚本由 GitLab Runner 执行。



Expand Down Expand Up @@ -248,7 +246,15 @@ GitLab Runner 实现了很多可用于在不同场景中运行构建的执行器



### PIPELINE

一次 Pipeline 其实相当于一次构建任务,里面可以包含多个流程,如安装依赖、运行测试、编译、部署测试服务器、部署生产服务器等流程。

任何提交或者 Merge Request 的合并都可以触发 Pipeline



流水线的流程是,提交代码后,gitlab会检测项目根目录里的`.github-ci.yml`文件,根据文件中的流水线自动构建,配置文件格式正确性可以在gitlab进行文件校验,格式使用yaml文件格式,一个yaml文件就是一个流水线,里面会定义多个作业

## 配置`.gitlab-ci.yml`文件

Expand All @@ -257,9 +263,13 @@ GitLab Runner 实现了很多可用于在不同场景中运行构建的执行器
- 定义了 runner 需要执行的步骤和任务(顺序)。
- 当特定条件满足时,runner需要执行的任务。



例如,你需要定义一个任务(当有提交到任意分支[非默认分支]时,执行一系列构建测试。当提交到默认分支时,执行构建测试并发布到项目测试环境中)

脚本被分组到`job`中,并且作业作为更大的 **流水线** 的一部分运行。您可以将多个独立作业分组到按定义顺序运行的**阶段**。 CI/CD 配置至少需要一项非隐藏的作业。
脚本被分组到`job`中,并且作业作为更大的 **流水线** 的一部分运行。

您可以将多个独立作业分组到按定义顺序运行的 **阶段**。 CI/CD 配置至少需要一项非隐藏的作业。

当您将 `.gitlab-ci.yml` 文件添加到仓库时,GitLab 会检测到它,并且 GitLab Runner 应用程序会运行作业中定义的脚本。

Expand Down Expand Up @@ -348,7 +358,8 @@ stages:
# 4.如果deploy中的所有job执行成功,这个流水线被标记为passed
# 如果任意一个job执行失败,流水线被标记为failed,后续stage中的job都不会执行,同一stage中的job不会被停止,会继续执行。
# 如果流水线中没有定义stages,那么 build,test,depoly就是默认的stages,默认各阶段顺序如下:
# 如果流水线中没有显式定义stages,那么build,test,depoly就是默认的stages,默认各阶段顺序如下:
# .pre
# build
# test
Expand Down Expand Up @@ -437,7 +448,7 @@ deploy_production:

- workflow:rules

workflow 用于配置规则,来确认是否执行流水线,workflow 在流水线最顶层定义。
workflow 用于控制PIPELINE行为,来确认是否执行流水线,workflow 在流水线最顶层定义。

```yaml
workflow:
Expand All @@ -454,11 +465,11 @@ deploy_production:
```yaml
workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule" # 计划流水线不执行
- if: '$CI_PIPELINE_SOURCE == "schedule" # 计划流水线不执行
when: never
- if: '$CI_PIPELINE_SOURCE == "push"' # push事件不执行
- if: '$CI_PIPELINE_SOURCE == "push"' # push事件不执行
when: never
- when: always # 其他的事件都流水线
- when: always # 其他的事件都流水线
# 所有规则都可以是 when: never,最后是 when:always 规则。 匹配 when: never 规则的流水线不会运行。 所有其他流水线类型运行
```
Expand Down Expand Up @@ -620,7 +631,7 @@ job 是通过 runner 执行,多个 job 也可以在一个 stage 中并行执



# gitlab webhooks
# gitlab webhook

`webhook` 是一种基于 HTTP 的回调函数,可在 2 个应用编程接口(API)之间实现轻量级的事件驱动通信。

Expand All @@ -632,9 +643,7 @@ Webhook 通常被称为 **反向 API** 或 **推送 API**,因为通信责任

- **自动化构建和部署**:当开发者将代码推送到版本控制系统(如 GitHub、GitLab 或 Bitbucket)时,可以通过 Webhooks 触发 CI/CD 工具(如 Jenkins、CircleCI、GitLab CI)自动执行构建、测试和部署过程。
- **发布通知**:在新版本发布时,通过 Webhooks 将信息推送到通知系统,如 Slack 或 Microsoft Teams,以便团队成员及时了解发布进度。

- **监控系统报警**:通过 Webhooks,监控系统(如 Prometheus、Datadog)可以在检测到异常时实时通知管理员或相关团队。可以发送消息到 Slack、PagerDuty 或钉钉飞书邮箱等通知服务。

- **社交媒体通知**:当用户在社交媒体平台上发生某些互动(如新消息、评论、点赞)时,通过 Webhooks 通知相关用户或服务。
- **支付确认**:支付平台(如 PayPal、Stripe)可以通过 Webhooks 向商户的服务器发送支付状态更新,例如支付成功、支付失败、退款等信息,以便商户系统实时更新订单状态。
- **订阅管理**:当用户订阅状态改变(如取消订阅、升级订阅)时,支付平台通过 Webhooks 通知商户系统,以便更新用户的服务权限。
Expand Down
18 changes: 17 additions & 1 deletion http/HTTP权威指南.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -2412,6 +2412,8 @@ https://www.cnblogs.com/kevingrace/p/10459429.html

最初的 HTTP 协议并没有版本号,0.9 实际上是为了跟后续的 1.0 版本作区分。总的来说 0.9 版本十分简陋,功能单一。

它只有一个方法(GET),没有首部,其设计目标也无非是获取 HTML (也就是说没有图片,只有文本)。

特点:

- 只支持 GET 请求,在其后面跟上目标资源的路径
Expand All @@ -2426,9 +2428,11 @@ https://www.cnblogs.com/kevingrace/p/10459429.html



## HTTP/1.0 1996年


## HTTP/1.0 1996年

RFC 1945

在 0.9 基础上做了扩展,支持传输更多类型的内容。

Expand Down Expand Up @@ -2477,6 +2481,18 @@ https://www.cnblogs.com/kevingrace/p/10459429.html

## HTTP/2 2015年

2012 年初,HTTP 工作组(IETF 工作组中负责 HTTP 规范的小组)启动了开发下一个 HTTP 版本的工作。

其纲领的关键部分阐述了工作组对新协议的一些期望:

- 相比于使用 TCP 的 HTTP/1.1,最终用户可感知的多数延迟都有能够量化的显著改善;
- 解决 HTTP 中的队头阻塞问题;
- 并行的实现机制不依赖与服务器建立多个连接,从而提升 TCP 连接的利用率,特别是在拥塞控制方面;



最终,RFC 7540 在 2015 年 5 月 14 日发布了,HTTP/2 成为正式协议。

# HTTP2

HTTP/2 , 简称 h2 ,是 WWW 所使用的 HTTP 协议的一个重大修订版本。其目的是提升加载 WEB 内容时的感知性能。
Expand Down
68 changes: 64 additions & 4 deletions linux-foundmentals/2、shell-foundmentals.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@

CLI 只能接受文本输入,也只能显示出文本和基本的图形输出。



#### 控制台终端Terminal

在 Linux 命令行界面模式中,开机后显示器出现的命令行界面(shell CLI)就叫终端,这种模式称作 Linux 控制台,因为它仿真了早期的硬接线控制台终端,而且是一种同 Linux系 统交互的直接接口。
Expand Down Expand Up @@ -62,15 +64,51 @@ CLI 只能接受文本输入,也只能显示出文本和基本的图形输出

```



UNIX 系统上的 terminfo 数据库用于定义终端和打印机的属性及功能,包括各设备(例如,终端和打印机)的行数和列数以及要发送至该设备的文本的属性

UNIX 中的几个常用程序都依赖 terminfo 数据库提供这些属性以及许多其他内容,其中包括 vi 和 emacs 编辑器以及 curses 和 man 程序。



tput 命令将通过 terminfo 数据库对您的终端会话进行初始化和操作。通过使用 tput,您可以更改几项终端功能,如移动或更改光标、更改文本属性,以及清除终端屏幕的特定区域。
tput 命令将通过 terminfo 数据库对您的终端会话进行初始化和操作。

通过使用 tput,您可以更改几项终端功能,如移动或更改光标、更改文本属性,以及清除终端屏幕的特定区域。

```bash
tput clear # 清除屏幕
tput sc # 记录当前光标位置
tput rc # 恢复光标到最后保存位置
tput civis # 光标不可见
tput cnorm # 光标闪烁可见
tput cup x y # 光标按设定坐标点移动

tput blink # 文本闪烁
tput bold # 文本加粗
tput el # 清除到行尾
tput smso # 启动突出模式
tput rmso # 停止突出模式
tput smul # 下划线模式
tput rmul # 取消下划线模式
tput sgr0 # 恢复默认终端
tput rev # 反相终端

# 文本加粗
bold=$(tput bold 2>/dev/null)
# 恢复默认终端
sgr0=$(tput sgr0 2>/dev/null)



# 获取当前shell
shell=$(echo $SHELL | awk 'BEGIN {FS="/";} { print $NF }')

echo "Detected shell: ${bold}$shell${sgr0}"

```







Expand Down Expand Up @@ -482,7 +520,6 @@ http://c.biancheng.net/view/773.html
# 变量声明,变量名大写,变量值用引号括起来,防止值中有空格
# 单引号声明变量 NAME='VALUE' 单引号不能识别特殊语法,即raw string
# 双引号声明变量 NAME="VALUE" 双引号不能识别特殊语法,可以实现变量插值
# 单引号变量,raw string
Expand All @@ -508,6 +545,8 @@ root@vpsServer:~#
#### 环境变量
环境变量是未在当前进程中定义,而从父进程中继承而来的变量。例如环境变量 `HTTP_PROXY` ,它定义了互联网连接应该使用哪个代理服务器。
环境变量一般是值用 export 命令导出的变量,主要目的是用于控制计算机内所有程序的运行行为,比如:定义 shell 的运行环境等等。
```shell
Expand Down Expand Up @@ -642,6 +681,27 @@ unset -f pathmunge
## 数学运算
在Bash shell环境中,可以利用 let(( )) 和 [] 执行基本的算术操作。而在进行高级操作时,expr 和 bc 这两个工具也会非常有用。
可以用普通的变量赋值方法定义数值,这时它会被存储为字符串。
```bash
#!/bin/bash
no1=4;
no2=5;
let result=no1+no2
echo ${result}
# 自加操作
let no1++
```
## 命令历史
Expand Down
45 changes: 13 additions & 32 deletions linux-foundmentals/4、ssh-scp-foundmentals.md
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ https://www.cnblogs.com/sparkdev/p/10166061.html



OpenSSH 客户端程序默认已经被系统安装好了,打开 设置->应用->可选功能 面板就可以看到
OpenSSH 客户端程序默认已经被系统安装好了,打开 设置->应用->可选功能面板就可以看到

也可以添加功能,安装 openssh server,安装好后,在服务中启动 openssh server 就可以让 windows 被 ssh 远程连接。

Expand All @@ -191,10 +191,6 @@ OpenSSH 服务器端程序的默认配置文件 sshd_config_default 也在这个







本文只记录 ssh 基本组件的用法,关于 ssh-agent 和 ssh-add 等命令,这里没有记录。


Expand Down Expand Up @@ -506,10 +502,10 @@ $ rpm -ql openssh-clients

# ssh客户端全局配置文件,所有用户公用的配置文件
/etc/ssh/ssh_config

# ssh客户端用户配置文件,针对某个用户的具体配置文件,可以覆盖全局配置文件
~/.ssh/config


# ssh服务端配置文件,用来配置认证方式,是否启用root登陆,加密方式等等。
/etc/ssh/sshd_config

Expand All @@ -525,6 +521,7 @@ $ rpm -ql openssh-clients
# 这个文件可以追加写入多个公钥
~/.ssh/authorized_keys

# 当第一次登陆远程主机时,不管是用密码还是密钥,这段话提示用户无法确认远程主机的真实性,只知道 RSA 公钥的指纹,询问用户是否继续。

# 你访问过远程主机的公钥指纹都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH 会核对公钥指纹。如果公钥不同,OpenSSH 会发出警告。
~/.ssh/known_hosts
Expand Down Expand Up @@ -573,18 +570,20 @@ Host *
``` shell
# /etc/ssh/sshd_config sshd 服务端常用配置选项

port 22 # ssh端口,Linux一般都是22端口做为ssh服务
PermitRootLogin yes # 允许root远程登录
PasswordAuthentication no  # 不允许密码方式登录
RSAAuthentication yes # 允许RSA认证,只针对SSH1
PubkeyAuthentication yes # 允许公钥认证
AuthorizedKeysFile .ssh/authorized_keys #保存公钥的认证文件
port 22 # ssh端口,Linux一般都是22端口做为ssh服务
PermitRootLogin yes # 是否允许root远程登录
PasswordAuthentication no  # 是否允许密码方式登录
RSAAuthentication yes # 允许RSA认证,只针对SSH1
PubkeyAuthentication yes # 是否允许公钥认证
AuthorizedKeysFile .ssh/authorized_keys # 保存公钥的认证文件

UseDNS yes # 服务端sshd服务开启UseDNS选项状态下,当客户端试图使用SSH连接服务器时,服务器端先根据客户端的IP地址进行DNS PTR反向查询出客户端的主机名,然后根据查询出的客户端主机名进行DNS正向A记录查询,验证与其原始IP地址是否一致,这是防止客户端欺骗的一种措施,但一般我们的是动态IP不会有PTR记录,建议关闭该选项。
UseDNS yes # 服务端sshd服务开启UseDNS选项状态下,当客户端试图使用SSH连接服务器时,服务器端先根据客户端的IP地址进行DNS PTR反向查询出客户端的主机名,然后根据查询出的客户端主机名进行DNS正向A记录查询,验证与其原始IP地址是否一致,这是防止客户端欺骗的一种措施,但一般我们的是动态IP不会有PTR记录,建议关闭该选项。


```
## SSH 常用场景
### 使用密钥认证方式登陆
Expand Down Expand Up @@ -913,8 +912,6 @@ rm -f tmp.sh
## ssh 和 scp 使用代理
连接国外 VPS 时,因为某些原因,ssh 连上了很卡,而且经常失去连接,因此需要让 ssh 走代理加速。
ssh 使用 socks5、http_connect 代理:
Expand Down Expand Up @@ -942,12 +939,6 @@ host github.com
scp/sftp 使用 socks5、http_connect 代理:
```shell
Expand All @@ -963,10 +954,6 @@ $ sftp -oProxyCommand="nc -Xconnect -x127.0.0.1:1080 %h %p" USER@SSH_SERVER
```
https://blog.csdn.net/DiamondXiao/article/details/52488628
Expand Down Expand Up @@ -1019,18 +1006,12 @@ pacman -Ql openssh
火狐信息安全openssh—guidelines
https://infosec.mozilla.org/guidelines/openssh
https://infosec.mozilla.org/guidelines/openss
https://github.com/jtesta/ssh-audit
对于有公网IP的Linux,一般一定要设置 ssh 登陆保护。
1、将 ssh 端口修改成非默认的 22 端口,可以有效的避免互联网上攻击者的恶意扫描和尝试登陆。
Expand Down
4 changes: 3 additions & 1 deletion network/ICMP协议.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ ICMP 的全称是 `Internet Control Message Protocol(互联网控制协议)`,

这也就是说,当主机收到一个指明上层协议为 ICMP 的 IP 数据报时,它会分解出该数据报的内容给 ICMP,就像分解数据报的内容给 TCP 和 UDP 一样。

ICMP 协议和 TCP、UDP 等协议不同,它不用于传输数据,只是用来发送消息。因为 IP 协议现在有两类版本:IPv4 和 IPv6 ,所以 ICMP 也有两个版本:**ICMPv4 和 ICMPv6**
ICMP 协议和 TCP、UDP 等协议不同,它不用于传输数据,只是用来发送消息。

因为 IP 协议现在有两类版本:IPv4 和 IPv6 ,所以 ICMP 也有两个版本:**ICMPv4 和 ICMPv6**



Expand Down
Loading

0 comments on commit 6e95c18

Please sign in to comment.