Auto: 使用 Artifactory 和自托管运行器在 GitHub Action 中未正确获取身份验证

创建于 2021-03-19  ·  14评论  ·  资料来源: intuit/auto

描述错误

我正在尝试验证在自托管运行器上运行的金丝雀版本,该版本从私有 Artifactory npm 注册表中提取依赖项,然后通过自托管运行器上的 GitHub 操作将包发布回它。 除了发布步骤本身之外,一切似乎都正常工作,我看到以下内容:

Screen Shot 2021-03-19 at 10 11 08 AM

随后,进一步向下:

Screen Shot 2021-03-19 at 10 11 53 AM

我不一定有权访问由我们的运营团队管理的 runner 环境,但我已经验证了以下内容:

  • 该操作在/home/ubuntu/actions-runner/_work/fe-ui/fe-ui
  • .npmrc文件似乎已使用令牌条目正确更新

    • //artifactory.internal.livongo.com/artifactory/api/npm/npm-repository/:_authToken=${NPM_TOKEN}

  • 使用上述令牌更新的.npmrc文件位于/home/ubuntu/.npmrc

再现



预期行为

截图

环境信息:


附加上下文

我很想提供任何额外的信息,但我没有更多的信息。 我可以做些什么来添加可能有助于解决此问题的其他详细信息?

所有14条评论

看起来您正在使用 legacyAuth。 我会先尝试将其关闭

@hipstersmoothie当您说使用旧版身份验证时,您的意思是.npmrc文件中的_auth = [token]吗? 如果是这样,情况并非如此,如果不是,您究竟是什么意思,我将如何关闭它?

您可能应该与您的开发人员一起解决这个问题。

基于我们的人工制品使用的一些提示:

  • 我们将一个有效的工件 .npmrc 存储在我们构建期间注入的环境变量中

Screen Shot 2021-03-19 at 11 32 06 AM

  • 由于我们自己设置 npmrc,因此您还需要将npm插件的setRcTokenfalse

我注意到输出中的 canary 命令使用了_auth标志,只有在 .autorc 中将legacyAuth设置为 true 时才使用该标志

因此,您可以在本地采取的步骤是:

  1. 让 npmrc 在本地工作并发布到 artifactory
  2. 将其复制到环境变量中
  3. 在构建过程中将该环境变量注入~/.npmrc
  4. 确保您已将setRcTokenfalse

@hipstersmoothie啊,您说得对,我们确实将 legacyAuth 设置为 true,因为没有它(现在我正在尝试您的建议),我们会从我们的人工制品实例中收到 403 Forbidden。 我只是尝试在.npmrc文件中使用令牌集设置注册表(就像在我的原始帖子中使用实际令牌),但仍然看到 403。我知道这可能是我们的操作设置的限制,但是只是出于好奇,你的 npmrc 里有什么? 我们的情况如下:

registry = https://artifactory.internal.livongo.com/artifactory/api/npm/npm-virtual
email = [email protected]
always-auth = true
save-exact = true

然后在 package.json 中:

"publishConfig": {
  "registry": "https://artifactory.internal.livongo.com/artifactory/api/npm/npm-repository/"
},

你会注意到,publish 和 npm installs 的 URL 的结尾是不同的,我的理解是通过 Artifactory 来实现缓存层的,但我绝对不是 Artifactory 本身的专家。 我只记得当我们从本地机器发布到 Artifactory 时,这是我们能够使身份验证正常工作(通过使用 legacyAuth)的唯一方法。 现在,我们正在尝试阻止本地发布并将其卸载到 GitHub Actions,但是,幸运的是,我想在从我们的共享自动配置中删除 legacyAuth 并将其分发到我们所有的包之前发布该更改的金丝雀,但是唉,我无法发布,因为我现在无法发布,因为缺少 legacyAuth,哈哈。

我们很久以前就设置过一次,但我会尝试传达我们采取的步骤:

这是我们用于设置 npmrc 的内部文档

Screen Shot 2021-03-19 at 12 01 36 PM

除此之外,我可能不会有太大帮助。 Artifactory 可能有点难以表现

@hipstersmoothie感谢您的帮助。 就让 Artifactory 的行为而言,您是非常正确的,如果您无法访问管理实例并且必须不断与 devops 来回尝试事物,则尤其困难。

无论如何,我感谢您的帮助,并将继续努力解决这个问题。 我已经尝试模仿类似于您在该屏幕截图中显示的设置(然后再次尝试以在您发布后进行验证)并且它不适用于我的用例,可能是因为 Artifactory 中的设置不同为我们。 如果你不介意,我想保持这个问题开放,如果/当我们解决这个问题时会回来关闭它。 作为该过程的一部分,我可能最终会逐步了解 auto 的内部结构。

是的,我没问题。 如果您想出一些好的人工设置步骤,我们也可以将其添加到文档中

@hipstersmoothie我正在看这条线:

https://github.com/intuit/auto/blob/v10.21.3/plugins/npm/src/set-npm-token.ts#L37

对于我的本地机器(能够访问内部工件),当isCifalse ,我可以发布。 如果我将上面引用的本地node_modules/@auto-it/npm/dist/set-npm-token.js行更改为if (false) { ,那么我会得到与isCitrue时相同的 403 错误。

要么对非 ci 正确,要么对 ci 正确。 我怀疑setTokenOnCI没有考虑legacyAuth ,它应该考虑吗?

看起来你可能没注意到我说的地方

确保您已将 setRcToken 设置为 false

如果您将setRcToken设置为false ,则会跳过所有这些代码

@hipstersmoothie 真是一个很好的回应,一旦我们将setRcTokenfalse一切都很好。 通过 github 操作对我们的工件使用auto是一个GO。 谢谢!

问题可以关闭,用户/设置错误,感谢支持。

@hipstersmoothie感谢您在我们解决这个问题时耐心等待。

此页面是否有帮助?
0 / 5 - 0 等级