Gitea Actions常见问题解答
本页面包含一些关于Gitea Actions的常见问题和答案。
为什么默认情况下不启用Actions?
我们知道为整个实例和每个仓库启用Actions可能很麻烦,但并不是每个人都喜欢或需要此功能。 在我们认为Gitea Actions值得被特别对待之前,我们认为还需要做更多的工作来改进它。
是否可以在我的实例中默认启用新仓库的Actions?
是的,当您为实例启用Actions时,您可以选择默认启用actions 单元以适用于所有新仓库。
[repository]
DEFAULT_REPO_UNITS = ...,repo.actions
在工作流文件中应该使用${{ github.xyz }}
还是${{ gitea.xyz }}
?
您可以使用github.xyz
,Gitea将正常工作。
如前所述,Gitea Actions的设计是与GitHub Actions兼容的。
然而,我们建议在工作流文件中使用gitea.xyz
,以防止在工作流文件中出现不同类型的密钥(因为您在Gitea上使用此工作流,而不是GitHub)。
不过,这完全是可选的,因为目前这两个选项的效果是相同的。
是否可以为特定用户(而不是组织)注册Runner?
目前还不可以。 从技术上讲是可以实现的,但我们需要讨论是否有必要。
使用actions/checkout@v3
等Actions时,Job容器会从何处下载脚本?
您可能知道GitHub上有成千上万个Actions市场。
然而,当您编写uses: actions/checkout@v3
时,它实际上默认从gitea.com/actions/checkout下载脚本(而不是从GitHub下载)。
这是github.com/actions/checkout的镜像,但无法将它们全部镜像。
这就是为什么在尝试使用尚未镜像的某些Actions时可能会遇到失败的原因。
好消息是,您可以指定要从任何位置使用Actions的URL前缀。 这是Gitea Actions中的额外语法。 例如:
uses: https://github.com/xxx/xxx@xxx
uses: https://gitea.com/xxx/xxx@xxx
uses: http://your_gitea_instance.com/xxx@xxx
注意,https://
或http://
前缀是必需的!
另外,如果您希望您的Runner默认从GitHub或您自己的Gitea实例下载Actions,可以通过设置 [actions].DEFAULT_ACTIONS_URL
进行配置。
参见配置速查表。
这是与GitHub Actions的一个区别,但它应该允许用户以更灵活的方式运行Actions。
如何限制Runner的权限?
Runner仅具有连接到您的Gitea实例的权限。 当任何Runner接收到要运行的Job时,它将临时获得与Job关联的仓库的有限权限。 如果您想为Runner提供更多权限,允许它访问更多私有仓库或外部系统,您可以向其传递密钥。
对于 Actions 的细粒度权限控制是一项复杂的工作。 在未来,我们将添加更多选项以使Gitea更可配置,例如允许对仓库进行更多写访问或对同一组织中的所有仓库进行读访问。
如何避免被黑客攻击?
有两种可能的攻击类型:未知的Runner窃取您的仓库中的代码或密钥,或恶意脚本控制您的Runner。
避免前者意味着不允许您不认识的人为您的仓库、组织或实例注册Runner。
后者要复杂一些。 如果您为公司使用私有的Gitea实例,您可能不需要担心安 全问题,因为您信任您的同事,并且可以追究他们的责任。
对于公共实例,情况略有不同。 以下是我们在 gitea.com上的做法:
- 我们仅为 "gitea" 组织注册Runner,因此我们的Runner不会执行来自其他仓库的Job。
- 我们的Runner始终在隔离容器中运行Job。虽然可以直接在主机上进行这样的操作,但出于安全考虑,我们选择不这样做。
- 对于 fork 的拉取请求,需要获得批准才能运行Actions。参见#22803。
- 如果有人在gitea.com为其仓库或组织注册自己的Runner,我们不会反对,只是不会在我们的组织中使用它。然而,他们应该注意确保该Runner不被他们不认识的其他用户使用。
act runner支持哪些操作系统?
它在Linux、macOS和Windows上运行良好。 虽然理论上支持其他操作系统,但需要进一步测试。
需要注意的一点是,如果选择直接在主机上运行Job而不是在Job容器中运行,操作系统之间的环境差异可能会导致意外的失败。
例如,在大多数情况下,Windows上没有可用的bash,而act尝试默认使用bash运行脚本。
因此,您需要在工作流文件中将默认shell指定为powershell
,参考defaults.run。
defaults:
run:
shell: powershell