跳至主要内容

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

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

设置持久化环境变量

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

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

对于单个 codespace

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

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

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

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

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

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

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

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

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

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

将此更改推送到存储库后,当您重新构建容器或创建新的代码空间时,此设置将生效。有关将配置更改应用于代码空间的更多信息,请参阅“开发容器简介”。

使用自定义Dockerfile

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

如果您已经拥有Dockerfile并希望在容器范围内设置变量,则此方法很有用。

将此更改推送到存储库后,当您重新构建容器或创建新的代码空间时,此设置将生效。有关将配置更改应用于代码空间的更多信息,请参阅“开发容器简介”。

使用开发环境机密

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

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

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

对于您创建的所有代码空间

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

防止自动删除临时文件

创建代码空间时,您的存储库将克隆到代码空间中的/workspaces目录中。这是一个持久目录,已装载到容器中。在该目录内进行的任何更改(包括编辑、添加或删除文件)在您停止并启动代码空间以及在代码空间中重新构建容器时都会保留。

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

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

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

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

进一步阅读