跳至主要内容

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

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

设置持久化环境变量

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

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

针对单个 codespace

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

在您保存对该文件的更改后,下次打开 codespace 时变量值将被设置,或者您可以通过运行 source ~/.bashrc 等命令立即设置。停止并启动 codespace 后变量仍然保持。然而,如果您重建容器,主目录下的文件会被重置,所以在 ~/.bashrc 文件中设置的变量在重建后不会持久化。更多信息,请参见防止临时文件被自动删除

针对仓库的所有 codespaces

您可以通过三种方式为为某仓库创建的所有 codespaces 设置持久化的自定义环境变量。

  • 您可以编辑该仓库的 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 的开发环境机密为为该仓库创建的 codespaces 设置自定义变量。更多信息请参见管理 GitHub Codespaces 帐户专属机密

对于不想以明文提交到仓库的环境变量值,您应使用此方法。

此设置将在下次为该仓库创建 codespace,或重新启动现有 codespace 时生效。

针对您创建的所有 codespaces

如果您想为自己创建的所有 codespaces 设置个性化的环境变量,可以在您的 dotfiles 仓库中的文件中进行设置。例如,在 .bash_profile 文件中添加 VARNAME=value。在 dotfile 中设置的环境变量仅对您个人生效,不会为其他人设置。有关 Dotfiles 的更多信息,请参见为您的账户个性化 GitHub Codespaces

防止临时文件被自动删除

创建代码空间时,您的仓库会被克隆到代码空间中的 /workspaces 目录。该目录是持久化的,并挂载到容器中。您在此目录内所做的任何更改,包括编辑、添加或删除文件,在停止并重新启动代码空间以及在代码空间中重建容器时都会被保留。

/workspaces 目录之外,代码空间包含一个 Linux 目录结构,具体取决于用于构建代码空间的开发容器镜像。您可以在 /workspaces 目录之外添加文件或修改文件。例如,您可以安装新程序,或在像 ~/.bashrc 这样的文件中设置 shell 配置。作为非 root 用户,您可能没有对某些目录的自动写入权限,但大多数镜像允许使用 sudo 命令获取 root 权限进行写入。

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

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

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

延伸阅读

© . This site is unofficial and not affiliated with GitHub, Inc.