跳到主要内容从零搭建 Gitee 标准化脚本仓库:自动化运维脚本管理方案 | 极客日志Shell / Bash
从零搭建 Gitee 标准化脚本仓库:自动化运维脚本管理方案
在 Gitee 搭建标准化自动化脚本仓库的方案,包括环境准备、目录结构规范、Git 版本控制、SSH 免密配置、跨主机迁移及脚本头部自动注入功能。通过规范化命名、提交记录及云端备份,实现运维脚本的高效管理、复用与精准获取,适用于个人或团队场景。
内存管理24 浏览 从零搭建 Gitee 标准化脚本仓库:自动化运维脚本管理方案
前言
日常会编写大量 Ansible、Shell、Python 自动化脚本,分散存放不仅难以检索,还存在丢失风险。本文将带你从零搭建Gitee 标准化脚本仓库,通过规范化目录结构、Git 版本控制、云端备份,实现脚本的高效管理、复用、跨主机迁移,以及单个脚本的精准获取,适合个人或团队运维场景。
一、环境准备
1. 本地环境
- 操作系统:Ubuntu 20.04+/CentOS 7+(本文以 Ubuntu 为例)
- 核心工具:Git(版本 2.30+)
- 权限:root 用户(或 sudo 权限)
2. 云端环境
二、核心目标
- 标准化目录结构:按「语言 + 功能 + 环境」分类,脚本一目了然
- 版本控制:通过 Git 追踪脚本修改记录,支持回滚
- 云端备份:同步本地脚本到 Gitee,避免丢失
- 规范管理:统一脚本命名、元数据注释、Git 提交规范
- 跨主机迁移:新主机一键复刻仓库环境,无缝衔接
- 灵活获取:支持完整仓库克隆、单个脚本下载,适配不同使用场景
三、完整操作步骤
步骤 1:安装 Git 并配置基础信息
1.1 安装 Git(Ubuntu 系统)
apt update -y
apt install git -y
git --version
1.2 配置 Git 全局信息(提交代码时显示的身份)
git config --global user.name "<your_name>"
git config --global user.email "<[email protected]>"
git config --global pull.rebase false
步骤 2:创建 Gitee 私有仓库
2.1 网页端创建仓库
- 登录 Gitee → 右上角「+」→「新建仓库」
- 填写仓库信息(关键配置):
- 仓库名称:
script-repo-name(自定义,建议含 scripts 标识)
- 路径:默认与仓库名称一致
- 仓库类型:私有(保护运维脚本等敏感内容)
- 初始化设置:不勾选「使用 README 文件初始化仓库」(避免后续合并冲突)
- 点击「创建」,记录仓库 SSH 地址(后续关联用):
[email protected]:<your_gitee_username>/script-repo-name.git
2.2 配置 SSH 免密登录(可选但推荐)
- 登录 Gitee → 右上角头像 →「设置」→「SSH 公钥」
- 粘贴复制的公钥,点击「确定」
步骤 3:本地初始化标准化脚本仓库
3.1 下载自动化初始化脚本
创建 init_script_repo.sh 脚本,一键生成标准化目录结构、README、.gitignore:
cat > init_script_repo.sh << 'EOF'
set -e
GITEE_USERNAME="<your_gitee_username>"
REPO_NAME="script-repo-name"
LOCAL_REPO_PATH="$HOME/scripts"
GIT_NAME="<your_name>"
GIT_EMAIL="<[email protected]>"
green_echo() {
echo -e "\033[32m$1\033[0m"
}
red_echo() {
echo -e "\033[31m$1\033[0m"
}
yellow_echo() {
echo -e "\033[33m$1\033[0m"
}
green_echo "===== 0. 前置检查:检测 Git 环境 ====="
if ! command -v git &> /dev/null; then
red_echo "未检测到 Git,开始自动安装..."
apt update -y && apt install git -y
if ! command -v git &> /dev/null; then
red_echo "Git 安装失败,请手动安装后重试!"
exit 1
fi
green_echo "Git 安装成功!"
else
green_echo "Git 已安装:$(git --version)"
fi
green_echo "===== 1. 创建脚本目录结构 ====="
mkdir -p "${LOCAL_REPO_PATH}"/{ansible,shell,python,archive}/{cloud,monitor,automation,centos,ubuntu,api}
green_echo "目录创建完成:${LOCAL_REPO_PATH}"
green_echo "===== 2. 生成标准化 README.md ====="
cat > "${LOCAL_REPO_PATH}/README.md" << README_EOF
# ${REPO_NAME} 个人/团队自动化脚本管理仓库,包含 Ansible/Shell/Python 等运维脚本。
## 目录说明
| 目录 | 用途 |
|--------------|--------------------------|
| ansible/ | Ansible Playbook/Role |
| shell/ | Shell 脚本(按系统分类) |
| python/ | Python 自动化脚本 |
| archive/ | 废弃/归档脚本 |
## 脚本规范
1. 文件名格式:功能_环境。后缀(如:nginx_install_centos.sh)
2. 脚本头部必须包含元数据注释(功能、环境、依赖、版本)
3. Git 提交规范:feat(目录): 描述 / fix(目录): 描述
## 依赖说明
- Shell 脚本:bash 环境,部分需 curl/wget
- Python 脚本:见 requirements.txt
- Ansible 脚本:Ansible 2.10+
README_EOF
green_echo "===== 3. 生成.gitignore 文件 ====="
cat > "${LOCAL_REPO_PATH}/.gitignore" << GITIGNORE_EOF
# 通用忽略文件
*.log
*.swp
*.tmp
.DS_Store
.idea/
.vscode/
__pycache__/
*.pyc
# 运维脚本忽略文件
*.iso
*.tar.gz
*.zip
password.txt
*.key
*.pem
GITIGNORE_EOF
green_echo "===== 4. 初始化 Git 仓库 ====="
cd "${LOCAL_REPO_PATH}"
if [ -d .git ]; then
yellow_echo "当前目录已存在 Git 仓库,跳过初始化步骤!"
else
git init
green_echo "Git 仓库初始化完成!"
fi
git config user.name "${GIT_NAME}"
git config user.email "${GIT_EMAIL}"
green_echo "Git 用户信息配置完成:${GIT_NAME} <${GIT_EMAIL}>"
green_echo "===== 5. 关联 Gitee 远程仓库 ====="
GITEE_REPO_URL="[email protected]:${GITEE_USERNAME}/${REPO_NAME}.git"
if git remote | grep -q "origin"; then
yellow_echo "已存在 origin 远程关联,先删除旧关联..."
git remote remove origin
fi
git remote add origin "${GITEE_REPO_URL}"
green_echo "已关联远程仓库(SSH):${GITEE_REPO_URL}"
green_echo "===== 6. 提交初始版本 ====="
git add .
if git rev-parse --verify HEAD &> /dev/null; then
yellow_echo "已存在提交记录,跳过初始提交步骤!"
else
git commit -m "feat: 初始化脚本仓库,创建标准化目录结构"
green_echo "初始版本提交完成!"
fi
green_echo "===== 7. 添加.gitkeep 占位文件 ====="
find . -type d -empty -exec touch {}/.gitkeep \;
git add .
git commit -m "feat: 添加.gitkeep 占位文件,确保空目录被 Git 追踪"
green_echo "占位文件添加完成!"
green_echo "===== 本地仓库初始化完成!====="
green_echo "本地仓库路径:${LOCAL_REPO_PATH}"
green_echo "后续执行 git push -u origin master 即可推送到 Gitee"
EOF
3.2 执行初始化脚本
chmod +x init_script_repo.sh
./init_script_repo.sh
3.3 查看生成的目录结构
步骤 4:关联 Gitee 并推送本地仓库
4.1 推送初始版本到 Gitee
cd /root/scripts
git push -u origin master
4.2 解决可能的冲突(若创建仓库时勾选了 README)
若推送时提示 (fetch first) 冲突,执行以下命令合并:
git pull origin master --allow-unrelated-histories
git checkout --ours README.md
git checkout --ours .gitignore
git add README.md .gitignore
git commit -m "merge: 解决 README 和.gitignore 冲突,保留本地标准化配置"
git push -u origin master
步骤 5:跨主机迁移(更换主机时)
5.1 新主机环境准备
apt update -y && apt install git tree -y
git config --global user.name "<your_name>"
git config --global user.email "<[email protected]>"
git config --global pull.rebase false
5.2 新主机配置 SSH 免密
5.3 克隆 Gitee 仓库到新主机
git clone [email protected]:<your_gitee_username>/script-repo-name.git ~/scripts
cd ~/scripts
tree -L 2
5.4 (可选)同步脚本依赖环境
apt install ansible -y
pip3 install -r ~/scripts/requirements.txt
步骤 6:其他主机使用脚本仓库(完整/单个脚本)
6.1 方式 1:克隆完整仓库(持续使用/多脚本)
cd ~/scripts/shell/centos
bash nginx_install_centos.sh
cd ~/scripts
git pull origin master
HTTPS 方式(需输 Gitee 账号和私人令牌):
git clone https://gitee.com/<your_gitee_username>/script-repo-name.git ~/scripts
apt update -y && apt install git -y
6.2 方式 2:仅下载单个脚本(临时使用/按需获取)
6.2.1 网页端下载(可视化操作)
- 登录 Gitee → 进入仓库 → 找到目标脚本(如
shell/centos/nginx_install_centos.sh);
- 点击脚本 → 右上角「原始数据」→ 右键「另存为」保存到本地;
scp 本地脚本路径 root@目标主机 IP:/root/
6.2.2 命令行直接下载(目标主机执行)
- 复制脚本原始链接(网页端「原始数据」页面的地址);
chmod +x /root/nginx_install_centos.sh
bash /root/nginx_install_centos.sh
wget https://gitee.com/<your_gitee_username>/script-repo-name/raw/master/shell/centos/nginx_install_centos.sh -O /root/nginx_install_centos.sh
curl -o /root/nginx_install_centos.sh https://gitee.com/<your_gitee_username>/script-repo-name/raw/master/shell/centos/nginx_install_centos.sh
6.2.3 稀疏克隆(指定目录/多个脚本)
git remote add origin [email protected]:<your_gitee_username>/script-repo-name.git
git pull origin master
echo "shell/centos/">> .git/info/sparse-checkout
mkdir -p ~/scripts && cd ~/scripts
git init
git config core.sparseCheckout true
6.3 团队协作权限配置
- 登录 Gitee → 仓库 →「管理」→「仓库成员」;
- 点击「添加成员」,输入用户名并分配权限(「开发者」可推送,「只读」仅能拉取);
- 成员按上述方式克隆/下载脚本即可。
四、日常脚本管理规范
1. 脚本命名规范
- 格式:
功能_环境。后缀
- 示例:
nginx_install_centos.sh、vmware_create_vm.yml、log_analyzer_python.py
2. 自动插入脚本头部(无需 touch,任意方式创建即生效)
通过配置 PROMPT_COMMAND 钩子,实现任意方式创建.sh/.py/.yml 文件时,自动插入标准化头部,无需依赖 touch 命令,重启终端或系统后永久生效。
2.1 配置全局钩子(永久生效)
编辑 ~/.bashrc 文件(bash 环境):
SCRIPT_AUTHOR="<your_name>"
SCRIPT_PERMISSION="root"
SCRIPT_VERSION="v1.0"
check_and_add_header(){
for file in $(find . -maxdepth 50 -type f -name "*.sh" -size 0 2>/dev/null); do
if ! grep -q "#!/bin/bash" "$file"; then
cat > "$file" << EOF
#!/bin/bash
##############################################################################
# 脚本名称:$(basename "$file")
# 功能描述:[请填写脚本功能,如:自动化安装 Nginx 并配置开机自启]
# 适用环境:[请填写适用环境,如:CentOS 7.x/Ubuntu 20.04]
# 依赖组件:[请填写依赖组件,如:gcc pcre-devel openssl-devel]
# 执行权限:${SCRIPT_PERMISSION}
# 作 者:${SCRIPT_AUTHOR}
# 创建日期:$(date +%Y-%m-%d)
# 版本号:${SCRIPT_VERSION}
# 修订记录:
# ${SCRIPT_VERSION} - 初始版本,实现 [请简要描述核心功能]
##############################################################################
# ======================== 脚本核心逻辑开始 ========================
EOF
chmod +x "$file"
echo "✅ 已为新脚本自动添加头部:$file"
fi
done
for file in $(find . -maxdepth 50 -type f -name "*.py" -size 0 2>/dev/null); do
if ! grep -q "#!/usr/bin/env python3" "$file"; then
cat > "$file" << EOF
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
##############################################################################
# 脚本名称:$(basename "$file")
# 功能描述:[请填写脚本功能,如:分析 Nginx 异常访问日志]
# 适用环境:[请填写适用环境,如:通用 Linux 环境]
# 依赖组件:[请填写依赖组件,如:python3-pandas python3-numpy]
# 执行权限:${SCRIPT_PERMISSION}
# 作 者:${SCRIPT_AUTHOR}
# 创建日期:$(date +%Y-%m-%d)
# 版本号:${SCRIPT_VERSION}
# 修订记录:
# ${SCRIPT_VERSION} - 初始版本,实现 [请简要描述核心功能]
##############################################################################
# ======================== 脚本核心逻辑开始 ========================
EOF
chmod +x "$file"
echo "✅ 已为新脚本自动添加头部:$file"
fi
done
for file in $(find . -maxdepth 50 -type f \( -name "*.yml" -o -name "*.yaml" \) -size 0 2>/dev/null); do
if ! grep -q "##############################################################################" "$file"; then
cat > "$file" << EOF
##############################################################################
# 脚本名称:$(basename "$file")
# 功能描述:[请填写脚本功能,如:批量创建 VMware 虚拟机]
# 适用环境:[请填写适用环境,如:VMware ESXi 7.0]
# 依赖组件:[请填写依赖组件,如:ansible 2.10+ pyvmomi]
# 执行权限:${SCRIPT_PERMISSION}
# 作 者:${SCRIPT_AUTHOR}
# 创建日期:$(date +%Y-%m-%d)
# 版本号:${SCRIPT_VERSION}
# 修订记录:
# ${SCRIPT_VERSION} - 初始版本,实现 [请简要描述核心功能]
##############################################################################
# ======================== Playbook 核心逻辑开始 ========================
EOF
echo "✅ 已为新脚本自动添加头部:$file"
fi
done
}
PROMPT_COMMAND="check_and_add_header; $PROMPT_COMMAND"
2.2 使配置生效(或重启系统永久生效)
2.3 验证效果(任意方式创建文件均生效)
验证 1:直接用 vim 创建.sh 文件
验证 2:用 echo 命令创建.py 文件
echo "print('test')"> test2.py
cat test2.py
验证 3:用 cat 命令创建.yml 文件
cat > test3.yml << EOF
- hosts: all
tasks:
- name: test
debug:
msg="hello"
EOF
cat test3.yml
2.4 核心特性说明
- 无需 touch:支持
vim/cat/echo 等任意方式创建脚本文件,头部自动插入;
- 多类型适配:同时支持
.sh/.py/.yml/.yaml 三种运维常用脚本类型;
- 避免重复写入:仅对空文件生效,已有内容的文件不会被修改;
- 自动加执行权限:
.sh/.py 文件自动赋予 chmod +x 权限;
- 实时检测:每次命令行操作后自动触发检测,无需手动执行函数;
- 配置灵活:作者、版本等信息统一在
.bashrc 中管理,修改后 source 即可生效。
3. Git 提交规范
cd /root/scripts
git commit -m "feat(shell): 新增 CentOS 下 Nginx 安装脚本 v1.0"
git commit -m "fix(ansible): 修复 vmware_create_vm.yml 磁盘参数错误"
git commit -m "update(python): 优化 log_analyzer.py 日志解析效率"
git commit -m "archive(shell): 归档 old_backup.sh 到 archive 目录"
4. 常用 Git 命令
git add .
git commit -m "描述"
git push origin master
git pull origin master
git log
git reset --hard 版本号(从 git log 获取)
五、常见问题排查
1. Git 推送提示认证失败
2. 合并冲突提示 Automatic merge failed
- 原因:本地与远程文件内容不一致
- 解决:使用
git checkout --ours 文件名 保留本地版本,或手动编辑冲突文件
3. 克隆后目录结构缺失
- 原因:新主机 Git 版本过低,或克隆时网络中断
- 解决:删除不完整仓库后重新克隆
rm -rf ~/scripts
git clone [email protected]:<your_gitee_username>/script-repo-name.git ~/scripts
4. 新建脚本未自动插入头部
- 原因:
.bashrc 配置未生效,未重启终端/系统;
find 命令的 maxdepth 限制过严;
- 使用
zsh 终端,配置未写入 ~/.zshrc。
- 解决:
- 执行
source ~/.bashrc 或重启系统;
- 将
maxdepth 50 调大(如 100);
zsh 用户将配置写入 ~/.zshrc 并执行 source ~/.zshrc。
六、总结
通过本文操作,你已搭建起一套标准化、可复用、可追溯、可跨主机迁移的脚本管理体系:
- 本地有规范化目录结构,脚本分类清晰,支持 Ansible/Shell/Python 多类型脚本;
- 云端有 Gitee 备份,通过 Git 实现版本控制,可回滚、可同步;
- 配置
PROMPT_COMMAND 钩子,无需 touch,任意方式创建脚本文件都自动插入标准化头部,并赋予执行权限;
- 支持完整仓库克隆或单个脚本下载,适配不同使用场景;
- 统一的命名、提交规范,降低团队协作成本。
相关免费在线工具
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
- Markdown转HTML
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
- HTML转Markdown
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
- JSON 压缩
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
- JSON美化和格式化
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online