0

私は Kubernetes や自分の登録済みランナーを使用していないため、この同様の質問は当てはまりません。

後続のパイプライン ステージで使用できるように gem を事前にインストールするために、GitLabCI パイプラインで Ruby ベースのイメージを構築しようとしています。このイメージを構築するために、.pre ステージで実行されるジョブで Kaniko を使用しようとしています。

build_custom_dockerfile:
  stage: .pre
  image:
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  variables:
    IMAGE_TAG: ${CI_COMMIT_REF_SLUG}-${CI_COMMIT_SHORT_SHA}
  script:
    - echo "{\"auths\":{\"${CI_REGISTRY}\":{\"username\":\"${CI_REGISTRY_USER}\",\"password\":\"${CI_REGISTRY_PASSWORD}\"}}}" > /kaniko/.docker/config.json
    - /kaniko/executor --context ${CI_PROJECT_DIR} --dockerfile ${CI_PROJECT_DIR}/dockerfiles/custom/Dockerfile --destination \
      ${CI_REGISTRY_IMAGE}:${IMAGE_TAG}

もちろん、これはGitLabCI Kaniko の公式ドキュメント に基づいています。

ただし、パイプラインを実行すると、このジョブは次のメッセージでエラーを返します。

error checking push permissions -- make sure you entered the correct tag name, and that you are authenticated correctly, and try again: getting tag for destination: registries must be valid RFC 3986 URI authorities: registry.gitlab.com

Dockerfile パスは正しく、 --dockerfile 引数への無効な Dockerfile パスを使用してテストした結果、これが問題の原因ではないことは明らかです。

私が知る限り、認証には正しいパイプライン環境変数を使用しており、Kaniko をそのまま使用するためのドキュメントに従っています。GitLab の共有ランナーを使用してパイプライン ジョブを実行しています。

5 月のこの問題のコメントによると、他のユーザーも同様の問題を経験しており、その後debug-v0.16.0Kaniko イメージに戻すと解決されました。同様に、イメージ名の行を に変更しましたname: gcr.io/kaniko-project/executor:debug-v0.16.0が、これにより同じエラー メッセージが表示されました。

最後に、ここに示されているように展開キーを使用して、レジストリにアクセスするための汎用ユーザーを作成してみました。GitLabCI 環境変数プロジェクト設定インターフェイスを介して、ユーザー名とキーに対応する 2 つの変数を追加し、パイプライン スクリプトでこれらの変数を置き換えました。これにより、同じエラー メッセージが表示されました。

これらのカスタム変数の名前を「CI_REGISTRY_USER」および「CI_REGISTRY_PASSWORD」(事前定義された変数)に変更するなど、このアプローチでいくつかのバリエーションを試しました。また、これらの変数のどちらも「保護」としてマークされていないことも確認しました。これで問題は解決しませんでした。

また、チュートリアル スクリプトを逐語的に (カスタム イメージ タグなしで) 実行しようとしましたが、これも同じエラー メッセージが表示されます。

Kaniko を使用して GitLabCI パイプラインで Docker イメージを構築することに最近成功した人はいますか? 他の人も同様の問題を経験しているようですが、私が知る限り、解決策は提示されておらず、問題が私の側にあるのかどうかはわかりません. 潜在的な問題の原因を診断するのに役立つ追加情報があれば教えてください。皆さんありがとう!

4

1 に答える 1

0

ねえ、私はそれを機能させましたが、見つけるのはかなり面倒でした.

私が使用しなければならなかった資格情報は、レジストリのユーザー/パスワードではなく、私の git ユーザー名とパスワードでした!

これが私のgitlab-ci.ymlの外観です(もちろん、すべてを変数に置き換える必要がありますが、今まで怠惰すぎてそれを行うことができませんでした)

 build:
  stage: build
  image: 
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  tags:
    - k8s
  script:
    - echo "{\"auths\":{\"registry.mydomain.de/myusername/mytag\":{\"username\":\"myGitusername\",\"password\":\"myGitpassword\"}}}" > /kaniko/.docker/config.json
    - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination registry.mydoamin.de/myusername/mytag:$CI_COMMIT_SHORT_SHA
于 2020-08-30T10:45:47.640 に答える