依赖源代码存储库进行版本控制是一种最佳的方法,当代码更改导致应用程序崩溃或行为不正常时,可以恢复运行。但是,如果发生诸如不小心删除分支或无法访问存储库等严重性事件,我们应该利用其他更高级恢复策略。
将我们的代码存储库备份到对象存储基础架构中时,就为我们提供了可以在需要时恢复的数据的异地副本。COS是腾讯云的对象存储解决方案,为用户提供存储数字资产,文档和代码备份的地方。
COS允许我们使用Coscmd等工具与之交互。Coscmd是一个客户端工具,我们可以通过命令行或通过脚本来上传,检索和管理来自对象存储的数据。
在本教程中,我们将演示如何使用Coscmd将远程Git存储库备份到腾讯云 COS。为了实现这一目标,我们将安装和配置Git,安装Coscmd,并创建脚本以将Git存储库备份到我们的COS中。
要使用COSs,您需要一个腾讯云帐户。如果您还没有,可以在注册页面注册。从那里,您需要设置您的腾讯云 COS并创建一个API密钥。创建后,您需要保留以下有关COS的详细信息secret_id
、secret_key
、bucket
、region
等参数,这些参数请继续阅读本文获取。
一台已经设置好可以使用sudo
命令的非root账号的Ubuntu 16.04服务器。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器。
设置好COSs信息和服务器后,请继续下一部分以安装Git。
在本教程中,我们将使用远程Git存储库,并将复制我们的服务器。Ubuntu安装了Git并准备在其默认存储库中使用,但此版本可能比最新版本旧。
我们可以使用apt
包管理工具来更新本地包索引,下载并安装最新的Git版本。
$ sudo apt-get update
$ sudo apt-get install git
要以更恰当的方式安装Git并确保您拥有最新版本,可以参考如何在Ubuntu系统上安装Git。
我们将从Git存储库的URL备份,因此我们不需要在本教程中配置Git。有关配置Git的指导,请参考如何在Ubuntu系统上安装Git。
现在我们将继续克隆我们的远程Git存储库。
为了克隆我们的Git存储库,我们将创建一个脚本来执行该任务。创建脚本允许我们使用变量并对确保我们不会在命令行上出错有帮助。
要编写我们的可执行脚本,我们将创建一个使用文本编辑器nano 创建一个名为cloneremote.sh
的新shell脚本文件。
$ nano cloneremote.sh
在这个空白文件中,让我们编写以下脚本。
cloneremote.sh
#!/bin/bash
remoterepo=your_remote_repository_url
localclonedir=repos
clonefilename=demoprojectlocal.git
git clone --mirror $remoterepo $localclonedir/$clonefilename
让我们来看看这个脚本的每个元素。
第一行 - #!/bin/bash
表示该脚本将由Bash shell运行。从那里,我们定义将在命令中使用的变量,这些变量将在我们执行脚本后运行。这些变量定义了以下配置:
remoterepo
正被分配在我们将从中备份的远程Git存储库URL中localclonedir
指的是我们将远程存储库克隆到的服务器目录或文件夹,在本例中我们已经调用它,叫repos
clonefilename
是指我们将提供给本地克隆存储库的文件名,在本例中我们称之为 demoprojectlocal.git
然后,在脚本末尾的命令中直接调用这些变量。
该脚本的最后一行使用从git
命令开始的Git命令行客户端。从那里,我们要求clone
使用--mirror
标记克隆存储库,并将其作为存储库的镜像版本执行。这意味着克隆的存储库将与原始存储库完全相同。我们调用上面定义的三个使用$
命名的变量。
如果您对所编写的脚本的正确率感到满意,可以通过输入CTRL+ x键退出nano编辑器,并在提示保存文件时按y
。
此时,我们可以使用以下命令运行shell脚本。
$ sh cloneremote.sh
运行该命令后,您将收到类似于以下内容的输出。
Output
Cloning into bare repository './repos/demoprojectlocal.git'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
Checking connectivity... done.
此时,如果列出当前目录中的项目,您应该在那里看到备份目录,如果您移动到该目录,您将看到包含您在脚本中提供的文件名的子文件夹。该子目录是Git存储库的克隆。
通过克隆我们的远程Git存储库,我们现在可以继续安装Coscmd,我们可以使用它将存储库备份到对象存储中。
pip install coscmd
安装成功后,用户可以通过 pip -v
或 pip --version
命令查看当前版本信息。
要将此备份上传到我们的腾讯云COS,我们将使用coscmd
工具。COSCMD 工具在使用前需要进行参数配置。用户可以通过如下命令来配置:
coscmd config -a <secret_id> -s <secret_key> -b <bucket> -r <region> [-m <max_thread>] [-p <parts_size>]
上述示例中使用"<>"的字段为必选参数,使用"[]"的字段为可选参数。其中:
名称 | 描述 | 有效值 |
---|---|---|
secret_id | 必选参数,APPID对应的密钥ID可从COS控制台左侧栏【密钥管理】或云API密钥控制台获取 | 字符串 |
secret_key | 必选参数,APPID对应的密钥Key可从COS控制台左侧栏【密钥管理】或云API密钥控制台获取 | 字符串 |
bucket | 必选参数,指定的存储桶名称,bucket的命名规则为{name}-{appid} ,参考创建存储桶 | 字符串 |
region | 必选参数,存储桶所在地域。参考可用地域 | 字符串 |
max_thread | 可选参数,多线程上传时的最大线程数(默认为5),有效值:1~10 | 数字 |
parts_size | 可选参数,分块上传的单块大小(单位为MB,默认为1 MB),有效值:1~10 | 数 |
那么我的命令是:
coscmd config -a AK***********************La -s B*********************oG -b t*****eb -r ap-chengdu
我们将首先测试我们的coscmd
配置并尝试访问我们的备份空间(在本教程中我们的空间被命名为mysql-backup-demo
):
$ coscmd list -a
您应该看到输出你cos文件列表:
Starting new HTTPS connection (1): q**************.cos.ap-shanghai.myqcloud.com
Kubernetes/ DIR
Tencent-CIS/ DIR
TencentDB/ DIR
此输出表明连接成功,coscmd
可以将对象传输到腾讯云COS。
安装和配置了所有工具后,我们现在将创建一个脚本,该脚本将压缩本地存储库并将其推送到腾讯云 COS。
从我们的主目录中,调用我们的脚本movetoCOSs.sh
并在nano内打开它。
$ cd ~
$ nano movetoCOSs.sh
我们将编写如下脚本。
movetoCOSs.sh
#!/bin/sh
tar -zcvf archivedemoproject.tar.gz /repos/demoprojectlocal.git
coscmd upload archivedemoproject.tar.gz
我们现在使用tar
来压缩Git存储库,然后再将其发送到COS。在tar
命令中,我们指定了四个标志:
z
使用gzip方法压缩c
创建一个新文件而不是使用现有文件v
表示我们对包含在压缩文件中的文件的详细信息f
使用下一个字符串中定义的名称命名生成的文件在标志之后,我们在这些情况下,为压缩文件命名为archivedemoproject.tar.gz
。我们还提供了要压缩的目录的名称/repos/demoprojectlocal.git
。
然后执行Coscmd upload
脚本以发送archivedemoproject.tar.gz
到我们的目标COS。
在您可能常用于Coscmd的命令中,upload
命令将文件发送到COSs。 其他可能有用的命令包括从COS下载文件的download
命令,您可以通过执行没有选项的Coscmd
来获取Coscmd接受的所有命令的列表。
要将备份复制到COS中,我们将执行该脚本。
$ sh movetoCOSs.sh
您将看到以下输出:
demoprojectlocal.git/
...demoprojectlocal.git/packed-refs
100%|█████████████████████████████████████████████████████████████████████████████████████████████████| 15.0/15.0 [00:00<00:00, 55.1KB/s]
您可以通过运行以下命令来检查进程是否正常工作:
$ coscmd list -a
您将看到以下输出,表明该文件位于您的COS中。
...
archivedemoproject.tar.gz 15 2018-08-10 16:11:17
我们现在已成功将Git存储库备份到腾讯云 COS中。
为确保在需要时可以快速恢复代码,维护备份非常重要。在本教程中,我们介绍了如何使用Git在Coscmd客户端和shell脚本将远程Git存储库备份到腾讯云 COS。这只是数十种可能情况的其中一种,您可以使用COSs来帮助您实现深度恢复数据。如果您在生产环境使用,我还是建议您直接使用腾讯Git代码托管,为开发者提供基于 Git 的在线代码托管工具,包含代码提交/存储/下载/复刻/分支/历史/比对/合并等功能。可一站式完成对代码及代码质量管理,项目及项目人员管理,大大提升研发效率。 更多Linux教程请前往腾讯云+社区学习更多知识。
参考文献:《How To Back Up Your Git Repository To COSs 》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。