跳至主要内容

将代码库连接到软件包

您可以将代码库连接到 GitHub 上的软件包。

谁可以使用此功能?

GitHub Packages 可用于 GitHub 免费版、GitHub 专业版、GitHub 组织免费版、GitHub 团队版、GitHub Enterprise Cloud 和 GitHub Enterprise Server 3.0 或更高版本。


使用旧版按代码库计费计划的帐户拥有的私有代码库无法使用 GitHub Packages。此外,使用旧版按代码库计费计划的帐户无法访问支持细粒度权限的注册表,因为这些帐户按代码库计费。有关支持细粒度权限的注册表列表,请参阅“GitHub Packages 的权限”。有关更多信息,请参阅“GitHub 的计划”。

发布范围限定为个人帐户或组织的软件包时,默认情况下该软件包不会链接到代码库。如果将软件包连接到代码库,则软件包的登录页将显示来自代码库的信息和链接,例如自述文件。您还可以选择让软件包继承其链接代码库的访问权限。有关更多信息,请参阅“配置软件包的访问控制和可见性”。

将代码库连接到 GitHub 上的用户范围软件包

  1. 在 GitHub 上,导航到您的个人帐户的主页。

  2. 在 GitHub 的右上角,单击您的个人资料照片,然后单击**您的个人资料**。

    Screenshot of the dropdown menu under @octocat's profile picture. "Your profile" is outlined in dark orange.

  3. 在您的个人资料页面上的页眉中,单击 **软件包**选项卡。

  4. 搜索并单击要管理的软件包的名称。

  5. 在您的软件包版本下,单击**连接代码库**。

  6. 选择要链接到软件包的代码库,然后单击**连接代码库**。

将代码库连接到 GitHub 上的组织范围软件包

  1. 在 GitHub 上,导航到您的组织的主页。

  2. 在您的组织名称下,单击 **软件包**选项卡。

    Screenshot of @octo-org's profile page. The "Packages" tab is highlighted with an orange outline.

  3. 搜索并单击要管理的软件包的名称。

  4. 在您的软件包版本下,单击**连接代码库**。

  5. 选择要链接到软件包的代码库,然后单击**连接代码库**。

使用命令行将代码库连接到容器镜像

注意

如果发布链接到代码库的软件包,则软件包会自动继承链接代码库的访问权限,并且链接代码库中的 GitHub Actions 工作流会自动获得对软件包的访问权限,除非您的组织已禁用访问权限的自动继承。有关更多信息,请参阅“配置软件包的访问控制和可见性”。

  1. 在您的 Dockerfile 中,添加此行,将OWNERREPO替换为您的详细信息

    LABEL org.opencontainers.image.source=https://github.com/OWNER/REPO
    

    例如,如果您是用户octocat并拥有my-repo,则应将此行添加到您的 Dockerfile 中

    LABEL org.opencontainers.image.source=https://github.com/octocat/my-repo
    

    有关更多信息,请参阅官方 Docker 文档中的“LABEL”和opencontainers/image-spec代码库中的“预定义的注释键”。

  2. 构建您的容器镜像。此示例从当前目录中的 Dockerfile 构建镜像,并将镜像名称指定为hello_docker

    docker build -t hello_docker .
    
  3. 或者,查看您刚刚创建的 Docker 镜像的详细信息。

    $ docker images
    > REPOSITORY          TAG         IMAGE ID       CREATED         SIZE
    > hello_docker        latest      142e665b1faa   5 seconds ago   125MB
    > redis               latest      afb5e116cac0   3 months ago    111MB
    > alpine              latest      a6215f271958   5 months ago    5.29MB
    
  4. 为您的 Docker 镜像分配名称和托管目标。

    docker tag IMAGE_NAME ghcr.io/NAMESPACE/NEW_IMAGE_NAME:TAG
    

    NAMESPACE替换为您希望软件包限定到的个人帐户或组织的名称。

    例如

    docker tag 38f737a91f39 ghcr.io/octocat/hello_docker:latest
    
  5. 如果您尚未这样做,请验证到容器注册表。有关更多信息,请参阅“使用容器注册表”。

    $ echo $CR_PAT | docker login ghcr.io -u USERNAME --password-stdin
    > Login Succeeded
    
  6. 将您的容器镜像推送到容器注册表。

    docker push ghcr.io/NAMESPACE/IMAGE-NAME:TAG
    

    例如

    docker push ghcr.io/octocat/hello_docker:latest
    

取消将代码库与 GitHub 上的软件包链接

注意

取消将软件包与代码库链接将从软件包的登录页中删除代码库信息,并可能影响访问模式,具体取决于软件包是否从代码库继承其访问权限。有关更多信息,请参阅“配置软件包的访问控制和可见性”。此行为不适用于 Apache Maven 软件包,如“GitHub Packages 的权限”中所述。

  1. 在 GitHub 上,导航到您要取消链接的软件包的设置页面。

  2. 在软件包设置页面上,您将看到一个代码库源部分。如果此部分不存在,则该软件包当前未链接到代码库。

  3. 单击代码库源部分右上角的垃圾桶图标。

代码库源部分可能存在,但没有垃圾桶图标。这是因为代码库源已定义为打包代码的一部分,即package.json文件、.gemspec文件,但是它实际上并未链接到 GitHub 上的代码库。要将软件包链接到代码库,您需要按照上面部分中的步骤操作。

  1. 使用对话框确认您要取消将代码库与软件包链接。

将软件包迁移到另一个代码库

如果您当前有一个链接到代码库的软件包,并且您希望将其链接到另一个代码库,可以通过取消将软件包与当前代码库链接并将其链接到新代码库来完成此操作。

  1. 按照取消链接的步骤操作,请参阅“取消将代码库与 GitHub 上的软件包链接”。
  2. 按照将软件包链接到新代码库的步骤操作,请参阅“将代码库连接到 GitHub 上的组织范围软件包”或“将代码库连接到 GitHub 上的用户范围软件包”。