代码备份和文件漫游

云原生开发环境采用按需使用,闲置自动销毁策略

为了避免开发环境销毁后未提交代码和配置文件丢失,云原生开发采用以下代码备份和文件漫游策略:

工作区代码备份

无需担心环境销毁后工作区未提交代码丢失。云原生开发采用如下两种备份方式,确保代码不丢失

开发环境销毁时备份

在当前工作区目录 /workspaces 修改代码后,如果未及时提交,无需担心修改记录丢失,环境回收时,会将修改的代码备份。 重建开发环境后,未提交的代码会恢复到工作区。

1. 备份和恢复方式

  • 开发环境销毁时备份: 将未提交代码,通过 git stash 方式提交到远程不可见分支,即利用仓库的存储能力实现备份。

  • 开发环境重建时恢复: 将远程不可见分支的备份代码,通过 git stash pop 方式恢复到工作区。

TIP

工作区存在大文件,可能导致备份失败或备份速度慢,尽量避免将 100M 以上大文件保存在工作区。

2. 备份内容

  • 工作区未 push 的 commit
  • 工作区未提交代码
  • 工作区的 stash

3. 备份代码删除时机

每个环境会产生两份备份,删除时机分别为:

  • 每个流水线对应一份备份:删除云原生开发环境记录时删除该备份(在我的云原生开发列表中删除)
  • 每个分支对应唯一一份备份:每个环境的备份会覆盖上一个环境的备份,每个分支仅保存最新一份备份,删除分支时删除该备份

4. 恢复策略说明

  • 已销毁环境基础上重建环境:恢复原环境的备份代码。
  • 分支上启动开发环境:恢复该分支的最新一份备份代码。
TIP

代码恢复后远程不可见分支的备份将被删除,即每次备份的代码仅可恢复一次。新的环境销毁时会产生新的备份代码。

以下内容不会备份:

  • .gitignore 文件中声明的内容不会被备份
  • 子仓库中修改的内容不会备份
  • 非工作区的修改不会备份

定时备份策略

为了避免上述备份方式失败,云原生开发同时采用了定时备份策略,定时将未提交代码打包并上传。

  • 备份:每 5 分钟获取一次工作区未提交代码,并生成压缩包上传。
  • 下载:可在 我的云原生开发 列表页,下载备份代码压缩包。
  • 删除:可在 我的云原生开发 列表页,删除开发环境历史记录时会删除该备份
TIP
  • 单个文件超过 100MB,该文件不会备份。
  • 备份代码压缩包超过 100MB 也不会被备份。

非工作区文件漫游

远程开发支持部分非工作区目录下文件漫游。

在环境销毁后,再次创建开发环境,漫游的文件可恢复到开发环境中。

最大漫游容量:64MB,超过最大容量将报错且无法漫游。

漫游内容

以下文件或文件夹会按用户维度进行漫游, 对所有项目有效果(~: 当前用户的主目录,一般是 /root 目录):

  • ~/.gitconfig: git 全局配置文件
  • ~/.local/share/code-server/User/settings.json:WebIDE 配置文件
  • ~/.local/share/code-server/User/snippets/*::VSCode 相关配置
  • ~/.cnb: 用户可按需在该目录下新增个人环境所需配置文件。

关于 ~/.cnb 目录的使用说明:

  • 新增配置文件:如果仓库需要新增个人配置文件 .env.local, 用于存储仓库所需的个人环境变量,可在 ~/.cnb 目录下新增 .env.local 文件
  • 在环境启动后可配置脚本任务~/.cnb/.env.local 复制或软链到工作目录(默认为/workspace), .cnb.yml 配置如下
  • .gitignore 中新增忽略文件 .env.local,避免个人配置文件被提交到仓库

1、示例一,复制文件到工作目录:

要修改漫游的配置文件,需直接修改 /root/.cnb/.env.local

# .cnb.yml
$:
  vscode:
    - name: vscode
      services:
        - vscode
      stages:
        - name: 复制 .env.local 文件到工作目录(仓库根目录)
          # ./ 是工作目录,默认为 /workspace
          script: |
            if [ -e "/root/.cnb/.env.local" ]; then
                cp -f /root/.cnb/.env.local ./
            else
                echo "文件不存在"
            fi

2、示例二,软链文件到工作目录:

要修改漫游的配置文件,可修改工作目录的 /workspace/.env.local(软链方式会同步修改源文件)

# .cnb.yml
$:
  vscode:
    - name: vscode
      services:
        - vscode
      stages:
        - name: 软链 .env.local 文件到工作目录(仓库根目录)
          # ./ 是工作目录,默认为 /workspace
          script: |
            if [ -e "/root/.cnb/.env.local" ]; then
                ln -sf /root/.cnb/.env.local ./.env.local 
            else
                echo "文件不存在"
            fi

漫游原理和时机

漫游时机:

用户在开发环境修改配置(如 settings.json)后,不会立马漫游修改内容, 而是等到开发环境销毁时,再从开发环境中取出需漫游的文件进行持久化存储

如何恢复漫游文件:

重建开发环境时,会自动将漫游的文件恢复到开发环境中

如何验证文件是否漫游成功:

修改可漫游文件后如需验证修改效果,需等到开发环境销毁后,再创建/重建开发环境才能看到修改文件的漫游效果

TIP

注意:

  • 同时打开多个开发环境,后销毁的开发环境的漫游内容会覆盖先销毁的开发环境的漫游内容。
  • 通过 kill 1 关闭开发环境,无法漫游成功。