Skip to main content

保留环境变量和临时文件

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

设置永久性环境变量

可以通过多种方式设置永久性自定义环境变量,具体取决于要为其提供变量的 codespace、存储库或用户。

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

对于单个 codespace

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

将更改保存到此文件后,下次打开 codespace 时便会设置该值,你也可以使用 source ~/.bashrc 等命令立即设置该值。 如果停止并启动 codespace,变量将保持已设置状态。 但是,如果重新生成容器,主目录中文件的更改将重置,因此在重新生成过程中,~/.bashrc 文件中设置的变量不会保留。 有关详细信息,请参阅“防止自动删除临时文件”。

对于存储库的所有 codespace

可以通过三种方式针对你为存储库创建的所有 codespace 设置永久性自定义环境变量:

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

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

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

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

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

环境变量将在编辑器的远程服务器进程中设置,并将可用于该远程服务器进程的子进程,如终端和调试会话。 但是,该变量在容器内不会扩大可用范围。 如果不需要为启动时运行的其他后台进程设置环境变量,并且使用的是预制映像而没有或无需自定义 Dockerfile,那么此方法非常有用。

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

使用自定义 Dockerfile

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

如果已有 Dockerfile 并希望在容器范围级别设置变量,那么此方法非常有用。

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

可以使用开发环境机密

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

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

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

对于创建的所有 codespace

如果要为创建的所有 codespace 设置个性化环境变量,可以使用 dotfiles 存储库中的文件对此进行设置。 例如,在 .bash_profile 文件中添加 VARNAME=value。 在点文件中设置的环境变量对你而言是个人变量,且不针对任何其他人设置。 有关点文件的详细信息,请参阅“个性化你帐户的 GitHub Codespaces”。

防止自动删除临时文件

创建 codespace 时,存储库将克隆到 codespace 的 /workspaces 目录中。 这是装载到容器中的永久性目录。 停止和启动 codespace 以及在 codespace 中重新生成容器时,将保留在此目录中所做的任何更改(包括编辑、添加或删除文件)。

/workspaces 目录外,codespace 包含 Linux 目录结构,该结构因用于生成 codespace 的开发容器映像而异。 可以添加文件或对 /workspaces 目录外的文件进行更改:例如,可以安装新程序,也可以在文件(如 ~/.bashrc)中设置 shell 配置。 作为非根用户,你可能不会自动拥有对某些目录的写入访问权限,但大多数映像允许使用 sudo 命令对这些目录进行根访问。

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

/tmp 目录是一个例外,因为它已装载到容器中,但不是永久性的。 因此,/tmp 目录的内容在重新生成时会保留,但每次 codespace 停止时都会被清除。 例如,如果 codespace 会话在处于非活动状态一段时间后超时,则会清除 /tmp 目录。 有关详细信息,请参阅“设置 GitHub Codespaces 超时期限”。

如果希望临时文件在下次启动 codespace 时可以使用,请不要将其保存在 /tmp 目录中。

延伸阅读