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 的部署支持是 *稳定* 的。
已知选项 #
使用以下选项进一步配置部署。需要 token
或 username
和 password
。
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_repo
或 repo
范围的 GitHub OAuth 令牌来上传资产。
GitHub oauth 令牌的 public_repo
和 repo
范围授予对用户所有(公共)存储库的写入访问权限。出于安全考虑,理想情况下,token
应仅对 Travis 部署到 GitHub 发布的存储库具有写入访问权限。建议的解决方法是创建一个 机器用户 — 一个 GitHub 帐户,该帐户在每个存储库的基础上被授予写入访问权限。
使用用户名和密码进行身份验证 #
您还可以使用 user
和 password
选项使用您的 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 命令。因此,将工作目录设置为将为其创建发布版本的目录非常重要,这通常不是问题,但如果您在构建过程中克隆另一个存储库或使用子模块,则值得仔细检查。
拉取请求 #
请注意,拉取请求构建完全跳过部署步骤。