Auto: Artifactoryおよびセルフホストランナーを使用したGitHubアクションで認証が正しく取得されない

作成日 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

opsチームによって管理されているため、必ずしもランナー環境にアクセスできるとは限りませんが、次のことを確認しました。

  • アクションは/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内にあります。

再現するには



予想される行動

スクリーンショット

環境情報:


追加のコンテキスト

追加情報を提供したいのですが、これ以上の情報はありません。 これを解決するのに役立つ可能性のある詳細を追加するには、どうすればよいですか?

bug

全てのコメント14件

あなたはlegacyAuthを使用しているようです。 最初にオフにしてみます

@hipstersmoothieは、レガシー認証を使用すると言うとき、 .npmrcファイルの_auth = [token]を意味しますか? もしそうなら、そうではありません、そうでなければ、あなたは正確に何を意味し、どうやってそれをオフにしますか?

あなたはおそらくあなたのdevopsの人とこれを解決するために働くべきです。

アーティファクトの使用法に基づくいくつかのヒント:

  • ビルド中に挿入されたenv変数に有効なアーティファクト.npmrcを保存します

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

  • npmrcを自分で設定しているので、 npmプラグインのsetRcTokenfalseに設定する必要もあります。

出力のカナリアコマンドが_authフラグを使用していることに気付きました。これは、.autorcでlegacyAuthがtrueに設定されている場合にのみ使用されます。

したがって、ローカルで実行できる手順は次のとおりです。

  1. アーティファクトに公開するnpmrcをローカルで動作させる
  2. それをenv変数にコピーします
  3. ビルド中にそのenv変数を~/.npmrc挿入します
  4. setRcTokenfalse設定していることを確認してください

@hipstersmoothieああ、あなたは正しいです。legacyAuthをtrueに設定しました。これがないと(そして今、私があなたの提案を試しているので)、アーティファクトインスタンスから403Forbiddenを取得しています。 .npmrcファイルのトークンセット(元の投稿と同様ですが、実際のトークン)を使用してレジストリを設定しようとしましたが、まだ403が表示されています。これはおそらくopsセットアップの制限であると理解していますが、好奇心から、あなたの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/"
},

URLの末尾がpublishとnpmのインストールで異なることに気付くでしょう。これは、キャッシュレイヤーのArtifactoryを通じて理解する必要がありましたが、Artifactory自体の専門家ではありません。 ローカルマシンからArtifactoryに公開するときに、これが(legacyAuthを使用して)認証を正しく機能させることができた唯一の方法だったことを覚えています。 現在、ローカル公開をブロックし、これをGitHub Actionsにオフロードしようとしていますが、運が良ければ、共有自動構成からlegacyAuthを削除してすべてのパッケージに配布する前に、その変更のカナリアを公開したいと思いましたが、残念ながら、legacyAuthがないために公開できなくなったため、公開できません(笑)。

これはかなり前に設定しましたが、実行する手順を伝えようとします。

npmrcを設定するための内部ドキュメントは次のとおりです

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

これ以外は、私はおそらくあまり助けにはならないでしょう。 アーティファクトリーは振る舞うのが少し難しいかもしれません

@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に対して正しいかのどちらかです。 setTokenOnCIlegacyAuthを考慮していないのではないかと思いますが、そうすべきですか?

私がこれを言ったところを見逃したかもしれないように見えます

setRcTokenがfalseに設定されていることを確認してください

setRcTokenfalse設定している場合、そのコードはすべてスキップされます

@hipstersmoothie setRcTokenfalseに設定すると、非常に良い応答が得られます。 githubアクションを介してアーティファクトにautoを使用するのは、GOです。 ありがとう!

サポートに感謝します。問題を解決できます。ユーザー/セットアップエラー。

@hipstersmoothieこれを理解している間、しばらく

このページは役に立ちましたか?
0 / 5 - 0 評価