- GitHub でエラーコード 2 の RST_STREAM を受信しました。
- 期限を超えました
- サーバーが公開鍵認証しか許可していないため、接続がブロックされました。
- ユーザー名を読み取れません: ターミナルプロンプトは無効です
- プルミラーに LFS ファイルがありません
- プルミラーリングがパイプラインをトリガーしない
The repository is being updated
しかし、失敗も成功も目に見えません- 無効なURL
- ホスト鍵の検証に失敗しました。
- Railsコンソールでミラーユーザーとトークンを単一のサービスアカウントに転送します。
リポジトリのミラーリングのトラブルシューティング
ミラーリングに失敗すると、プロジェクトのメンテナーにはのようなリンクが表示されます。Pull mirroring failed 1 hour ago.といったリンクがプロジェクトの詳細ページに表示されます。このリンクを選択すると、ミラーリング設定に直接移動し、GitLab はミラーリングされたリポジトリのエラーバッジを表示します。バッジの上にマウスカーソルを置くと、エラーの内容が表示されます:
GitHub でエラーコード 2 の RST_STREAM を受信しました。
GitHub リポジトリへのミラーリング中にこのメッセージが表示された場合:
13:Received RST_STREAM with error code 2
このようなイシューが発生している可能性があります:
- GitHub の設定で、コミットで使用したメールアドレスを公開するプッシュをブロックしている可能性があります。この問題を解決するには
- GitHub のメールアドレスを公開に設定します。
- Block command line push that expose my emailsetting を無効にしてください。
- リポジトリが GitHub のファイルサイズ制限である 100 MB を超えています。この問題を解決するには、GitHub で設定されているファイルサイズの上限を確認し、Git Large File Storageを使って大きなファイルを管理することを検討してください。
期限を超えました
GitLab をアップグレードすると、ユーザー名の表現方法が変更されるため、ミラーリングのユーザー名とパスワードを更新して、%40
文字が@
に置き換えられるようにする必要があります。
サーバーが公開鍵認証しか許可していないため、接続がブロックされました。
GitLabとリモートリポジトリ間の接続がブロックされています。TCPチェックが成功した場合でも、GitLabからリモートサーバーへの経路にあるネットワークコンポーネントがブロックされていないかチェックする必要があります。
このエラーは、ファイアウォールが送信パケットに対してDeep SSH Inspection
を実行した場合に発生する可能性があります。
ユーザー名を読み取れません: ターミナルプロンプトは無効です
GitLab CI/CD for external repositoriesを使って新しいプロジェクトを作成した後にこのエラーが表示された場合:
-
Bitbucket Cloudの場合:
"2:fetch remote: "fatal: could not read Username for 'https://bitbucket.org': terminal prompts disabled\n": exit status 128."
-
Bitbucket Server (自己管理) の場合:
"2:fetch remote: "fatal: could not read Username for 'https://lab.example.com': terminal prompts disabled\n": exit status 128.
ミラーリングしたリポジトリの URL にリポジトリオーナーが指定されているか確認してください:
- 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
- 設定] > [リポジトリ]を選択します。
- リポジトリをミラーリング]を展開します。
-
リポジトリのオーナーが指定されていない場合は、この形式で URL を削除し、
OWNER
、ACCOUNTNAME
、PATH_TO_REPO
、REPONAME
をあなたの値に置き換えて、再度追加します:-
Bitbucket Cloudの場合:
https://OWNER@bitbucket.org/ACCOUNTNAME/REPONAME.git
-
Bitbucket Server (自己管理) の場合:
https://OWNER@lab.example.com/PATH_TO_REPO/REPONAME.git
-
ミラーリングのためにクラウドまたは自己管理の Bitbucket リポジトリに接続する場合、文字列にはリポジトリオーナーが必要です。
プルミラーに LFS ファイルがありません
プルミラーリングで LFS ファイルが転送されない場合があります。このイシューは以下の場合に発生します:
- SSH リポジトリ URL を使用している場合。回避策としては、代わりに HTTPS リポジトリ URL を使用します。SSH URL に対してこの問題を修正するイシューが存在します。
- GitLab 14.0 以前を使用していて、ソースリポジトリが公開 Bitbucket URL です。GitLab 14.0.6 で修正されました。
- オブジェクトストレージを使用して外部リポジトリをミラーリングしています。この問題を修正するイシューが存在します。
プルミラーリングがパイプラインをトリガーしない
パイプラインが実行されない理由は複数あります:
-
ミラー更新のトリガーパイプラインが有効になっていない可能性があります。この設定は、プルミラーリングの初期設定時にのみ有効にできます。その後プロジェクトをチェックしても、ステータスは表示されません。
外部リポジトリに対して CI/CDを使用してミラーリングを設定する場合、この設定はデフォルトで有効になります。リポジトリのミラーリングを手動で再設定した場合、パイプラインのトリガーはデフォルトでオフになります。
-
rules
設定により、パイプラインにジョブが追加されなくなります。 - パイプラインは、プルミラーを設定したアカウントを使って起動されます。アカウントが無効な場合、パイプラインは実行されません。
- ブランチ保護により、ミラーリングを設定したアカウントがパイプラインを実行できなくなる可能性があります。
The repository is being updated
しかし、失敗も成功も目に見えません
まれに、メモリ不足(OoM)イベントによりSidekiqワーカーが刈り取られたために、Redis上のミラーリングスロットが枯渇することがあります。これが発生すると、ミラーリングジョブはすぐに開始し完了しますが、失敗も成功もしません。また、クリアログも残りません。この問題を確認するには
-
Railsコンソールに入り、Redisのミラーリング容量を確認します:
current = Gitlab::Redis::SharedState.with { |redis| redis.scard('MIRROR_PULL_CAPACITY') }.to_i maximum = Gitlab::CurrentSettings.mirror_max_capacity available = maximum - current
-
ミラーリング容量が
0
、または非常に少ない場合は、スタックしているジョブをすべて排出することができます:Gitlab::Redis::SharedState.with { |redis| redis.smembers('MIRROR_PULL_CAPACITY') }.each do |pid| Gitlab::Redis::SharedState.with { |redis| redis.srem('MIRROR_PULL_CAPACITY', pid) } end
-
コマンドを実行した後、バックグラウンドジョブページには、特に手動でトリガーされた場合、スケジュールされている新しいミラーリングジョブが表示されるはずです。
無効なURL
SSH 経由でミラーリングを設定しているときにこのエラーが表示された場合は、 URL が有効な形式であることを確認してください。
ミラーリングは SSH クローン URL のショートバージョン (git@gitlab.com:gitlab-org/gitlab.git
) をサポートしておらず、プロトコルを含むフルバージョン (ssh://git@gitlab.com/gitlab-org/gitlab.git
) が必要です。
ホストとプロジェクトのパスが:
ではなく/
で区切られていることを確認してください。
ホスト鍵の検証に失敗しました。
このエラーは、ターゲットホストの公開SSHキーが変更された場合に返されます。公開SSHキーが変更されることはほとんどありません。ホスト鍵の検証に失敗したが、その鍵がまだ有効だと思われる場合は、鍵の情報を更新してください。
前提条件:
- 少なくともプロジェクトのメンテナーのロールを持っている必要があります。
イシューを解決するには
- ホスト・キーを確認します。
- 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
- 設定] > [リポジトリ]を選択します。
- リポジトリをミラーリング]を展開します。
-
キーを更新するには
- Detect host keysfor GitLab を選択してサーバーからホスト鍵を取得し、フィンガープリントを表示します。
- Input host keys manuallyを選択し、SSHホストキーフィールドにホストキーを入力します。
- リポジトリのミラー化を選択します。
Railsコンソールでミラーユーザーとトークンを単一のサービスアカウントに転送します。
これにはGitLab Rails コンソールへのアクセスが必要です。
使用例複数のユーザーがそれぞれの GitHub 認証情報を使ってリポジトリのミラーリングを設定している場合、退職するとミラーリングが壊れてしまいます。このスクリプトを使って、バラバラのミラーリングユーザーとトークンを単一のサービスアカウントにマイグレーションしましょう:
svc_user = User.find_by(username: 'ourServiceUser')
token = 'githubAccessToken'
Project.where(mirror: true).each do |project|
import_url = project.import_url
# The url we want is https://token@project/path.git
repo_url = if import_url.include?('@')
# Case 1: The url is something like https://23423432@project/path.git
import_url.split('@').last
elsif import_url.include?('//')
# Case 2: The url is something like https://project/path.git
import_url.split('//').last
end
next unless repo_url
final_url = "https://#{token}@#{repo_url}"
project.mirror_user = svc_user
project.import_url = final_url
project.username_only_import_url = final_url
project.save
end