跳至主要内容

持久化环境变量和临时文件

您可以配置自定义环境变量,以便每次打开 Codespace 时将它们设置为相同的值。您还可以确保在 Codespace 停止时不会删除临时文件。

设置持久环境变量

您可以通过多种方式设置持久自定义环境变量,具体取决于您希望哪些 Codespaces、存储库或用户可以使用这些变量。

对于下面列出的所有设置自定义变量的方法,您都可以使用类似于 echo $VARNAME 的语法在您的 Codespace 中访问自定义变量。

对于单个代码空间

您可以在 ~/.bashrc 文件中设置环境变量的值,或者如果您没有使用 Bash shell,则可以在等效的配置文件中设置。例如,添加语句 VARNAME=value

保存对该文件的更改后,下次打开代码空间时将设置该值,或者您可以使用 source ~/.bashrc 等命令立即设置它。如果您停止并启动代码空间,该变量将保持设置状态。但是,如果您重建容器,则主目录中的文件更改将被重置,因此在 ~/.bashrc 文件中设置的变量不会在重建后持久保存。有关更多信息,请参阅“防止临时文件被自动删除”。

对于存储库的所有代码空间

您可以通过三种方式为为存储库创建的所有代码空间设置持久自定义环境变量

  • 您可以编辑存储库的 devcontainer.json 配置文件
  • 您可以使用自定义 Dockerfile
  • 您可以使用开发环境机密

编辑存储库的 devcontainer.json 配置文件

编辑存储库的 devcontainer.json 配置文件,并使用 remoteEnv 属性设置环境变量值

{
    "remoteEnv": {
      "VARNAME": "value"
   }
}

仅对您愿意以纯文本形式提交到存储库的值使用此方法。对于访问令牌等敏感值,请使用开发环境机密。

环境变量将在您的编辑器的远程服务器进程中设置,并将可用于该远程服务器进程的子进程,例如终端和调试会话。但是,该变量在容器内部将不会更广泛地可用。如果您不需要为启动时运行的其他后台进程设置环境变量,并且如果您使用的是预制映像并且没有或不需要自定义 Dockerfile,则此方法很有用。

此设置将在您将此更改推送到存储库后重建容器或创建新的 Codespace 时生效。有关将配置更改应用于 Codespace 的更多信息,请参阅“Dev 容器简介”。

使用自定义 Dockerfile

如果您使用的是自定义 Dockerfile,则可以通过添加 ENV VARNAME=value 在其中设置环境变量。

如果您已经拥有 Dockerfile 并且想要在容器级别设置变量,此方法很有用。

此设置将在您将此更改推送到存储库后重建容器或创建新的 Codespace 时生效。有关将配置更改应用于 Codespace 的更多信息,请参阅“Dev 容器简介”。

使用开发环境机密

您可以使用 GitHub Codespaces 的开发环境机密为为存储库创建的 Codespace 设置自定义变量。有关更多信息,请参阅“管理您针对 GitHub Codespaces 的帐户特定机密”。

对于您不想以纯文本形式提交到存储库的环境变量值,您应该使用此方法。

此设置将在您下次为此存储库创建 Codespace 或重新启动现有 Codespace 时生效。

对于您创建的所有 Codespace

如果您想为创建的所有 Codespace 设置个性化的环境变量,可以使用 dotfiles 存储库中的文件进行设置。例如,在 .bash_profile 文件中添加 VARNAME=value。您在 dotfile 中设置的环境变量是您个人的,不会为其他人设置。有关 Dotfiles 的更多信息,请参阅“个性化 GitHub Codespaces 以适合您的帐户”。

防止自动删除临时文件

创建 Codespace 时,您的存储库将被克隆到 Codespace 中的 /workspaces 目录。这是一个持久目录,它被挂载到容器中。您在此目录中进行的任何更改,包括编辑、添加或删除文件,都会在您停止和启动 Codespace 以及在 Codespace 中重建容器时保留。

/workspaces 目录之外,您的 Codespace 包含一个 Linux 目录结构,该结构根据用于构建 Codespace 的开发容器映像而有所不同。您可以在 /workspaces 目录之外添加文件或更改文件:例如,您可以安装新程序,或者可以在 ~/.bashrc 等文件中设置您的 shell 配置。作为非 root 用户,您可能不会自动拥有对某些目录的写入权限,但大多数映像允许使用 sudo 命令对这些目录进行 root 访问。

/workspaces 目录之外,除了 /tmp 目录,代码空间中的目录都与容器的生命周期绑定。这意味着您所做的任何更改都会在您停止和启动代码空间时保留,但在您重建容器时不会保留。有关创建符号链接以在 /workspaces 目录之外保留数据的更多信息,请参阅 "在代码空间中重建容器"。

/tmp 目录是一个例外,因为它被挂载到容器中,但它不是持久的。因此,/tmp 目录的内容在重建时会保留,但在代码空间每次停止时都会被清除。例如,当代码空间会话在一段时间不活动后超时时,/tmp 目录会被清除。有关更多信息,请参阅 "设置 GitHub 代码空间的超时时间"。

如果您有希望在下一次启动代码空间时可用的临时文件,请不要将它们保存在 /tmp 目录中。

进一步阅读