从零搭建Gitee标准化脚本仓库:自动化运维脚本管理
前言
作为IT从业者,日常会编写大量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系统)
# 更新软件源aptupdate -y# 安装Gitaptinstallgit-y# 验证安装结果git--version# 输出类似:git version 2.43.01.2 配置Git全局信息(提交代码时显示的身份)
gitconfig --global user.name"你的名字"gitconfig --global user.email"你的Gitee绑定邮箱"# 配置拉取时默认合并方式(避免后续冲突提示)gitconfig --global pull.rebasefalse步骤2:创建Gitee私有仓库
2.1 网页端创建仓库
- 登录Gitee → 右上角「+」→「新建仓库」
- 填写仓库信息(关键配置):
- 仓库名称:
Eilian-scripts-repo(自定义,建议含scripts标识) - 路径:默认与仓库名称一致
- 仓库类型:私有(保护运维脚本等敏感内容)
- 初始化设置:不勾选「使用README文件初始化仓库」(避免后续合并冲突)
- 仓库名称:
- 点击「创建」,记录仓库SSH地址(后续关联用):
git@gitee.com:zjqwzp/Eilian-scripts-repo.git
2.2 配置SSH免密登录(可选但推荐)
避免每次推送都输入账号密码,配置SSH免密:
# 生成SSH密钥(一路回车,无需设置密码)ssh-keygen -t ed25519 -C"你的Gitee绑定邮箱"# 查看公钥内容(全选复制)cat~/.ssh/id_ed25519.pub- 登录Gitee → 右上角头像 →「设置」→「SSH公钥」
- 粘贴复制的公钥,点击「确定」
- 验证SSH连接:
ssh-T git@gitee.com# 输出类似:Hi Eilian! 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="zjqwzp" # 你的Gitee用户名(路径中的用户名) REPO_NAME="Eilian-scripts-repo" # Gitee仓库名称 LOCAL_REPO_PATH="$HOME/scripts" # 本地脚本仓库路径 GIT_NAME="你的名字" # Git提交用户名 GIT_EMAIL="你的Gitee绑定邮箱" # 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已安装:$(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}" # 第二步:生成标准化README.md 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 # 第三步:生成.gitignore文件(过滤无用文件) 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 # 第四步:初始化Git仓库并配置 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}>" # 第五步:关联Gitee远程仓库(SSH方式) green_echo "===== 5. 关联Gitee远程仓库 =====" GITEE_REPO_URL="git@gitee.com:${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 # 第七步:添加空目录占位文件(确保Git追踪目录) green_echo "===== 7. 添加空目录占位文件 =====" 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" EOF3.2 执行初始化脚本
# 给脚本添加执行权限chmod+x init_script_repo.sh# 执行脚本./init_script_repo.sh3.3 查看生成的目录结构
tree /root/scripts# 输出类似:/root/scripts ├── ansible │ ├── api │ │ └── .gitkeep │ ├── automation │ │ └── .gitkeep │ ├── centos │ │ └── .gitkeep │ ├── cloud │ │ └── .gitkeep │ ├── monitor │ │ └── .gitkeep │ └── ubuntu │ └── .gitkeep ├── archive │ ├── api │ │ └── .gitkeep │ ├── automation │ │ └── .gitkeep │ ├── centos │ │ └── .gitkeep │ ├── cloud │ │ └── .gitkeep │ ├── monitor │ │ └── .gitkeep │ └── ubuntu │ └── .gitkeep ├── .gitignore ├── python │ ├── api │ │ └── .gitkeep │ ├── automation │ │ └── .gitkeep │ ├── centos │ │ └── .gitkeep │ ├── cloud │ │ └── .gitkeep │ ├── monitor │ │ └── .gitkeep │ └── ubuntu │ └── .gitkeep ├── README.md └── shell ├── api │ └── .gitkeep ├── automation │ └── .gitkeep ├── centos │ └── .gitkeep ├── cloud │ └── .gitkeep ├── monitor │ └── .gitkeep └── ubuntu └── .gitkeep步骤4:关联Gitee并推送本地仓库
4.1 推送初始版本到Gitee
# 进入本地脚本仓库目录cd/root/scripts# 推送到Gitee(首次推送需关联分支)gitpush -u origin master4.2 解决可能的冲突(若创建仓库时勾选了README)
若推送时提示(fetch first)冲突,执行以下命令合并:
# 拉取远程内容并合并(允许无共同历史)gitpull origin master --allow-unrelated-histories# 解决冲突(保留本地版本)gitcheckout --ours README.mdgitcheckout --ours .gitignore# 标记冲突已解决并提交gitaddREADME.md .gitignoregitcommit -m"merge: 解决README和.gitignore冲突,保留本地标准化配置"# 重新推送gitpush -u origin master步骤5:跨主机迁移(更换主机时)
当更换新主机时,一键复刻仓库环境:
5.1 新主机环境准备
# 安装Gitaptupdate -y&&aptinstallgittree -y# 配置Git全局信息(和原主机一致)gitconfig --global user.name"你的名字"gitconfig --global user.email"你的Gitee绑定邮箱"gitconfig --global pull.rebasefalse5.2 新主机配置SSH免密
# 生成SSH密钥ssh-keygen -t ed25519 -C"你的Gitee绑定邮箱"# 复制公钥并添加到Gitee(步骤同原主机)cat~/.ssh/id_ed25519.pub# 验证SSH连接ssh-T git@gitee.com5.3 克隆Gitee仓库到新主机
# 克隆仓库到新主机的~/scripts目录gitclone git@gitee.com:zjqwzp/Eilian-scripts-repo.git ~/scripts# 验证目录结构(和原主机一致)cd~/scripts tree -L25.4 (可选)同步脚本依赖环境
# 示例:安装Ansibleaptinstallansible -y# 示例:安装Python依赖(若仓库有requirements.txt)pip3install-r ~/scripts/requirements.txt步骤6:其他主机使用脚本仓库(完整/单个脚本)
6.1 方式1:克隆完整仓库(持续使用/多脚本)
适用于需要长期使用多个脚本、同步更新的场景:
- 目标主机准备Git环境:
aptupdate -y&&aptinstallgit-y - 克隆仓库(SSH/HTTPS方式):
- SSH方式(免密,需配置公钥):
gitclone git@gitee.com:zjqwzp/Eilian-scripts-repo.git ~/scripts - HTTPS方式(需输Gitee账号和私人令牌):
gitclone https://gitee.com/zjqwzp/Eilian-scripts-repo.git ~/scripts
- SSH方式(免密,需配置公钥):
- 同步最新脚本:
cd~/scriptsgitpull origin master - 执行脚本:
cd~/scripts/shell/centosbashnginx_install_centos.sh
6.2 方式2:仅下载单个脚本(临时使用/按需获取)
无需克隆完整仓库,仅获取目标脚本,节省空间:
6.2.1 网页端下载(可视化操作)
- 登录Gitee → 进入仓库 → 找到目标脚本(如
shell/centos/nginx_install_centos.sh); - 点击脚本 → 右上角「原始数据」→ 右键「另存为」保存到本地;
- 上传到目标主机:
scp本地脚本路径 root@目标主机IP:/root/
6.2.2 命令行直接下载(目标主机执行)
- 复制脚本原始链接(网页端「原始数据」页面的地址);
- 目标主机执行下载命令:
# wget方式wgethttps://gitee.com/zjqwzp/Eilian-scripts-repo/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/zjqwzp/Eilian-scripts-repo/raw/master/shell/centos/nginx_install_centos.sh - 赋予权限并执行:
chmod+x /root/nginx_install_centos.shbash/root/nginx_install_centos.sh
6.2.3 稀疏克隆(指定目录/多个脚本)
需使用某目录下多个脚本,无需完整仓库:
- 目标主机初始化空仓库:
mkdir-p ~/scripts&&cd~/scriptsgitinitgitconfig core.sparseCheckouttrue# 开启稀疏克隆 - 指定需拉取的目录:
echo"shell/centos/">>.git/info/sparse-checkout# 仅拉取shell/centos目录 - 关联仓库并拉取:
gitremoteaddorigin git@gitee.com:zjqwzp/Eilian-scripts-repo.gitgitpull origin master - 执行脚本:
cd~/scripts/shell/centosbashnginx_install_centos.sh
6.3 团队协作权限配置
若其他主机是团队成员使用,需配置仓库权限:
- 登录Gitee → 仓库 →「管理」→「仓库成员」;
- 点击「添加成员」,输入用户名并分配权限(「开发者」可推送,「只读」仅能拉取);
- 成员按上述方式克隆/下载脚本即可。
四、日常脚本管理规范
1. 脚本命名规范
- 格式:
功能_环境.后缀 - 示例:
nginx_install_centos.sh、vmware_create_vm.yml、log_analyzer_python.py
2. 脚本元数据注释模板
每个脚本头部必须添加标准化注释,方便检索与维护:
#!/bin/bash############################################################################### 脚本名称: nginx_install_centos.sh# 功能描述: 自动化安装配置Nginx,支持CentOS 7/8,包含防火墙配置与开机自启# 适用环境: CentOS 7.x / CentOS 8.x# 依赖组件: gcc pcre-devel openssl-devel wget# 执行权限: root# 作 者: 你的名字# 创建日期: 2026-01-20# 版本号: v1.0# 修订记录:# v1.0 - 初始版本,实现基础安装与配置# v1.1 - 新增Nginx配置文件备份功能(2026-01-21)##############################################################################3. Git提交规范
提交时按以下格式填写信息,便于追溯历史:
# 新增脚本gitcommit -m"feat(shell): 新增CentOS下Nginx安装脚本 v1.0"# 修复脚本buggitcommit -m"fix(ansible): 修复vmware_create_vm.yml磁盘参数错误"# 更新脚本功能gitcommit -m"update(python): 优化log_analyzer.py日志解析效率"# 归档废弃脚本gitcommit -m"archive(shell): 归档old_backup.sh到archive目录"4. 常用Git命令
# 1. 新增/修改脚本后提交gitadd.# 添加所有修改文件gitcommit -m"描述"# 提交到本地仓库# 2. 推送到Gitee(后续无需加-u)gitpush origin master# 3. 从Gitee拉取最新版本(多设备同步)gitpull origin master# 4. 查看提交历史gitlog# 或 git log --oneline(简洁格式)# 5. 回滚到指定版本gitreset --hard 版本号(从git log获取)五、常见问题排查
1. Git推送提示认证失败
- 原因:SSH公钥未配置或配置错误
- 解决:重新生成SSH公钥并添加到Gitee,验证
ssh -T git@gitee.com是否成功
2. 合并冲突提示Automatic merge failed
- 原因:本地与远程文件内容不一致
- 解决:使用
git checkout --ours 文件名保留本地版本,或手动编辑冲突文件
3. 克隆后目录结构缺失
- 原因:新主机Git版本过低,或克隆时网络中断
- 解决:删除不完整仓库后重新克隆
rm-rf ~/scriptsgitclone git@gitee.com:zjqwzp/Eilian-scripts-repo.git ~/scripts
六、总结
通过本文操作,你已搭建起一套标准化、可复用、可追溯、可跨主机迁移的脚本管理体系:
- 本地有规范化目录结构,脚本分类清晰;
- 云端有Gitee备份,避免脚本丢失;
- 通过Git版本控制,可追溯修改记录、回滚错误版本;
- 跨主机迁移只需克隆仓库,一键复刻环境;
- 支持完整仓库克隆或单个脚本下载,适配不同使用场景。
后续只需按规范新增、修改脚本并提交,即可高效管理所有自动化运维脚本。如果需要团队协作,可在Gitee仓库中添加成员并分配权限,共同维护脚本仓库。