GitHub 发布上传

此页面记录了使用下一个主要版本 dpl v2 的部署,该版本目前处于 beta 发布阶段。请参阅 我们的博文 获取详细信息。当前默认版本为 dpl v1。请查看 此处 dpl v1 文档

请务必阅读 v2 部署概述

Travis CI 可以自动将资产上传到 GitHub 存储库上的 git 标签。

对于最小配置,请将以下内容添加到您的 .travis.yml

deploy:
  provider: releases
  token: <encrypted token>
  file: <file>
  edge: true # opt in to dpl v2
  on:
    tags: true

此配置将使用给定的 GitHub OAuth 令牌在标记的构建上上传指定的文件(相对于工作目录)。

状态 #

对 GitHub Releases 的部署支持是 *稳定* 的。

已知选项 #

使用以下选项进一步配置部署。需要 tokenusernamepassword

token GitHub oauth 令牌(需要 public_repo 或 repo 权限)— 秘密,类型:字符串,别名:api_key
username GitHub 登录名 — 类型:字符串,别名:user
password GitHub 密码 — 秘密,类型:字符串
repo GitHub 仓库标识 — 类型:字符串,默认值:仓库标识
file 发布到 GitHub 的文件或通配符 — 类型:字符串或字符串数组,默认值:*
file_glob 将文件解释为通配符 — 类型:布尔值,默认值:true
overwrite 覆盖同名文件 — 类型:布尔值
prerelease 将发布标识为预发布 — 类型:布尔值
release_number 发布编号(覆盖自动发布检测)— 类型:字符串
release_notes 发布说明内容 — 类型:字符串,别名:body
release_notes_file 包含发布说明的文件路径 — 类型:字符串,注意:如果给定 –release_notes,则将被忽略
draft 将发布标识为草稿 — 类型:布尔值
tag_name 从中创建发布的 Git 标签 — 类型:字符串
target_commitish 确定从何处创建 Git 标签的 Commitish 值 — 类型:字符串
name 发布的名称 — 类型:字符串

共享选项 #

cleanup 在部署之前清理 Git 工作目录中的构建工件 — 类型:布尔值
run 部署成功后要执行的命令 — 类型:字符串或字符串数组

环境变量 #

如果所有选项以 GITHUB_RELEASES_ 为前缀,则可以作为环境变量给出。

例如,token 可以给出为

  • GITHUB_TOKEN=<token>
  • RELEASES_TOKEN=<token>

保护密钥 #

秘密选项值应作为构建配置(.travis.yml 文件)中的加密字符串或存储库设置中的环境变量给出。

环境变量可以在存储库的设置页面上设置,也可以使用 travis env set 设置。

travis env set GITHUB_TOKEN <token>

为了在将选项值添加到 .travis.yml 文件时对其进行加密,请使用 travis encrypt

travis encrypt <token>

或使用 --add 将其直接添加到 .travis.yml 文件中。请注意,此命令必须在存储库的根目录中运行

travis encrypt --add deploy.token <token>

使用 OAuth 令牌进行身份验证 #

建议的身份验证方法是使用具有 public_reporepo 范围的 GitHub OAuth 令牌来上传资产。

GitHub oauth 令牌的 public_reporepo 范围授予对用户所有(公共)存储库的写入访问权限。出于安全考虑,理想情况下,token 应仅对 Travis 部署到 GitHub 发布的存储库具有写入访问权限。建议的解决方法是创建一个 机器用户 — 一个 GitHub 帐户,该帐户在每个存储库的基础上被授予写入访问权限。

使用用户名和密码进行身份验证 #

您还可以使用 userpassword 选项使用您的 GitHub 用户名和密码进行身份验证。

deploy:
  provider: releases
  user: <user>
  password: <password>
  # ⋮

常规发布 #

draft 选项未设置为 true(见下文)时,将创建一个常规发布。

常规发布需要标签。如果您设置了 on.tags: true(如本文档中的初始示例),则满足此要求。

草稿发布 #

使用

deploy:
  provider: releases
  # ⋮
  draft: true

生成的部署是一个草稿发布,只有存储库协作者才能看到。

这使您有机会检查和编辑草稿发布。

在部署时设置标签 #

GitHub Releases 需要在部署时标记当前提交。如果您设置了 on.tags: true,则保证提交具有标签。但是,根据工作流程,这不是理想的。

在这种情况下,可以将设置标签推迟到您拥有所有必要信息为止。一个自然的位置是在 before_deploy 中。

例如

before_deploy:
  # Set up git user name and tag this commit
  - git config --local user.name "YOUR GIT USER NAME"
  - git config --local user.email "YOUR GIT USER EMAIL"
  - export TRAVIS_TAG=${TRAVIS_TAG:-$(date +'%Y%m%d%H%M%S')-$(git log --format=%h -1)}
  - git tag $TRAVIS_TAG
deploy:
  provider: releases
  # ⋮

当在部署时未设置标签时 #

如果在部署时仍未设置标签,则部署提供程序会尝试将当前提交与来自远程的标签匹配,如果找到一个,则使用它。

如果多个标签分配给当前提交,而您想要的标签未匹配,则可能会出现问题。

在这种情况下,将您需要的标签(方法将取决于您的用例)分配给 $TRAVIS_TAG 以解决此问题。

如果构建提交在部署时与任何标签都不匹配,则 GitHub 在创建发布时会创建一个标签。

GitHub 生成的标签格式为 untagged-*,其中 * 是一个随机的十六进制字符串。

请注意,此标签会立即在 GitHub 上可用,因此会触发新的 Travis CI 构建,除非通过其他方式阻止它;例如,通过 阻止列表 /^untagged/

覆盖发布上的现有文件 #

如果需要覆盖现有文件,请使用选项 overwrite

deploy:
  provider: releases
  # ⋮
  overwrite: true

部署到 GitHub Enterprise #

为了将资产上传到 GitHub Enterprise 存储库,请使用您的 GitHub Enterprise API 端点覆盖 $OCTOKIT_API_ENDPOINT 环境变量

http(s)://"GITHUB ENTERPRISE HOSTNAME"/api/v3/

您可以在 存储库设置 或通过您的 .travis.yml 中进行配置

env:
  global:
    - OCTOKIT_API_ENDPOINT=<endpoint>

上传多个文件 #

您可以使用 yml 数组表示法上传多个文件。此示例上传两个文件。

deploy:
  provider: releases
  # ⋮
  file:
    - file-1
    - file-2

选项 file 默认情况下接受通配符,因此您可以将其表达为

deploy:
  provider: releases
  # ⋮
  file: {file-1,file-2}

请注意,file 中的所有路径相对于当前工作目录,而不是相对于 $TRAVIS_BUILD_DIR

Git 子模块故障排除 #

GitHub Releases 在部署过程中执行许多 git 命令。因此,将工作目录设置为将为其创建发布版本的目录非常重要,这通常不是问题,但如果您在构建过程中克隆另一个存储库或使用子模块,则值得仔细检查。

拉取请求 #

请注意,拉取请求构建完全跳过部署步骤。

另请参阅 #