从零搭建 Gitee 标准化脚本仓库:自动化运维脚本管理方案
前言
日常会编写大量 Ansible、Shell、Python 自动化脚本,分散存放不仅难以检索,还存在丢失风险。本文将带你从零搭建Gitee 标准化脚本仓库,通过规范化目录结构、Git 版本控制、云端备份,实现脚本的高效管理、复用、跨主机迁移,以及单个脚本的精准获取,适合个人或团队运维场景。
一、环境准备
1. 本地环境
- 操作系统:Ubuntu 20.04+/CentOS 7+(本文以 Ubuntu 为例)
- 核心工具:Git(版本 2.30+)
- 权限:root 用户(或 sudo 权限)
2. 云端环境
- Gitee 账号:注册地址 https://gitee.com/
- 空仓库:提前创建私有仓库(用于存储脚本,避免敏感信息泄露)
二、核心目标
- 标准化目录结构:按「语言 + 功能 + 环境」分类,脚本一目了然
- 版本控制:通过 Git 追踪脚本修改记录,支持回滚
- 云端备份:同步本地脚本到 Gitee,避免丢失
- 规范管理:统一脚本命名、元数据注释、Git 提交规范
- 跨主机迁移:新主机一键复刻仓库环境,无缝衔接
- 灵活获取:支持完整仓库克隆、单个脚本下载,适配不同使用场景
三、完整操作步骤
步骤 1:安装 Git 并配置基础信息
1.1 安装 Git(Ubuntu 系统)
# 更新软件源
apt update -y
# 安装 Git
apt install git -y
# 验证安装结果
git --version
# 输出类似:git version 2.43.0
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 免密登录(可选但推荐)
避免每次推送都输入账号密码,配置 SSH 免密:
# 生成 SSH 密钥(一路回车,无需设置密码)
ssh-keygen -t ed25519 -C "<[email protected]>"
# 查看公钥内容(全选复制)
cat ~/.ssh/id_ed25519.pub
- 登录 Gitee → 右上角头像 →「设置」→「SSH 公钥」
- 粘贴复制的公钥,点击「确定」
验证 SSH 连接:
ssh -T [email protected]
# 输出类似:Hi <username>! You've successfully authenticated...
步骤 3:本地初始化标准化脚本仓库
3.1 下载自动化初始化脚本
创建 init_script_repo.sh 脚本,一键生成标准化目录结构、README、.gitignore:
cat > init_script_repo.sh << 'EOF'
#!/bin/bash
set -e
# ======================== 配置项(请修改为你的信息)========================
GITEE_USERNAME="<your_gitee_username>" # 你的 Gitee 用户名(路径中的用户名)
REPO_NAME="script-repo-name" # Gitee 仓库名称
LOCAL_REPO_PATH="$HOME/scripts" # 本地脚本仓库路径
GIT_NAME="<your_name>" # Git 提交用户名
GIT_EMAIL="<[email protected]>" # Git 提交邮箱
# ==========================================================================
# 颜色输出函数
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"
}
# 前置检查:检测 Git 是否安装
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 已安装:"
green_echo
-p /{ansible,shell,python,archive}/{cloud,monitor,automation,centos,ubuntu,api}
green_echo
green_echo
> <<
green_echo
> <<
green_echo
[ -d .git ];
yellow_echo
git init
green_echo
git config user.name
git config user.email
green_echo
green_echo
GITEE_REPO_URL=
git remote | grep -q ;
yellow_echo
git remote remove origin
git remote add origin
green_echo
green_echo
git add .
git rev-parse --verify HEAD &> /dev/null;
yellow_echo
git commit -m
green_echo
green_echo
find . - d -empty - {}/.gitkeep \;
git add .
git commit -m
green_echo
green_echo
green_echo
green_echo
EOF
3.2 执行初始化脚本
# 给脚本添加执行权限
chmod +x init_script_repo.sh
# 执行脚本
./init_script_repo.sh
3.3 查看生成的目录结构
tree /root/scripts
# 输出类似:
# /root/scripts
# ├── ansible
# │ └── ...
# ├── shell
# │ └── ...
# ├── python
# │ └── ...
# ├── archive
# │ └── ...
# ├── .gitignore
# ├── README.md
# └── ... (各目录下包含.gitkeep)
步骤 4:关联 Gitee 并推送本地仓库
4.1 推送初始版本到 Gitee
# 进入本地脚本仓库目录
cd /root/scripts
# 推送到 Gitee(首次推送需关联分支)
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 新主机环境准备
# 安装 Git
apt update -y && apt install git tree -y
# 配置 Git 全局信息(和原主机一致)
git config --global user.name "<your_name>"
git config --global user.email "<[email protected]>"
git config --global pull.rebase false
5.2 新主机配置 SSH 免密
# 生成 SSH 密钥
ssh-keygen -t ed25519 -C "<[email protected]>"
# 复制公钥并添加到 Gitee(步骤同原主机)
cat ~/.ssh/id_ed25519.pub
# 验证 SSH 连接
ssh -T [email protected]
5.3 克隆 Gitee 仓库到新主机
# 克隆仓库到新主机的~/scripts 目录
git clone [email protected]:<your_gitee_username>/script-repo-name.git ~/scripts
# 验证目录结构(和原主机一致)
cd ~/scripts
tree -L 2
5.4 (可选)同步脚本依赖环境
# 示例:安装 Ansible
apt install ansible -y
# 示例:安装 Python 依赖(若仓库有 requirements.txt)
pip3 install -r ~/scripts/requirements.txt
步骤 6:其他主机使用脚本仓库(完整/单个脚本)
6.1 方式 1:克隆完整仓库(持续使用/多脚本)
适用于需要长期使用多个脚本、同步更新的场景:
- 克隆仓库(SSH/HTTPS 方式):
执行脚本:
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
SSH 方式(免密,需配置公钥):
git clone [email protected]:<your_gitee_username>/script-repo-name.git ~/scripts
目标主机准备 Git 环境:
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 方式
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 方式
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 # 仅拉取 shell/centos 目录
目标主机初始化空仓库:
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 环境):
vim ~/.bashrc
在文件末尾添加以下内容:
# ======================== 自动插入脚本头部配置 ========================
# 配置项(按需修改)
SCRIPT_AUTHOR="<your_name>"
SCRIPT_PERMISSION="root"
SCRIPT_VERSION="v1.0"
# 检测新创建的空脚本文件并插入头部
check_and_add_header(){
# 处理.sh 文件
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
# 处理.py 文件
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
> <<
+x
file $(find . -maxdepth 50 - f \( -name -o -name \) -size 0 2>/dev/null);
! grep -q ;
> <<
}
PROMPT_COMMAND=
2.2 使配置生效(或重启系统永久生效)
source ~/.bashrc
# 若仍不生效,重启系统
reboot
2.3 验证效果(任意方式创建文件均生效)
验证 1:直接用 vim 创建.sh 文件
vim test1.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
输出包含标准化头部 + Playbook 内容。
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"
# 修复脚本 bug
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 命令
# 1. 新增/修改脚本后提交
git add .
# 添加所有修改文件
git commit -m "描述"
# 提交到本地仓库
# 2. 推送到 Gitee(后续无需加-u)
git push origin master
# 3. 从 Gitee 拉取最新版本(多设备同步)
git pull origin master
# 4. 查看提交历史
git log
# 或 git log --oneline(简洁格式)
# 5. 回滚到指定版本
git reset --hard 版本号(从 git log 获取)
五、常见问题排查
1. Git 推送提示认证失败
- 原因:SSH 公钥未配置或配置错误
- 解决:重新生成 SSH 公钥并添加到 Gitee,验证
ssh -T [email protected]是否成功
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,任意方式创建脚本文件都自动插入标准化头部,并赋予执行权限; - 支持完整仓库克隆或单个脚本下载,适配不同使用场景;
- 统一的命名、提交规范,降低团队协作成本。


