Windows GitlabランナーでHTTPを介して大規模なリポジトリを複製する際に問題が発生しています。浅いクローンを作成したり、クローン圧縮を無効にしたりする方法をいくつか試しました。まだ運がありません。
同じリポジトリをSSH経由で複製することは一時的な解決策としてはうまく機能します。これをGitlab CIプロセスで機能させたいと思います。
この問題は、gitlab-multi-runnerのクローンメソッドとしてSSHを使用する方法がわからないところにあります。 HTTPをデフォルトとして使用しているようで、クローン作成に関する私の唯一のオプションは、完全なクローンを作成するかフェッチするかです。
誰かがそのクローン/フェッチをHTTPではなくSSHでランナーで動作させる方法を説明できますか?
Gitlabバージョン:GitLab Community Edition 8.10.7
ありがとう!
による:
https://docs.gitlab.com/ee/ci/ssh_keys/README.html
必要がある:
Gitlab_ci.ymlの例:
before_script:
# Install ssh-agent if not already installed, it is required by Docker.
# (change apt-get to yum if you use a CentOS-based image)
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
# Run ssh-agent (inside the build environment)
- eval $(ssh-agent -s)
# Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
- ssh-add <(echo "$SSH_PRIVATE_KEY")
# For Docker builds disable Host key checking. Be aware that by adding that
# you are suspectible to man-in-the-middle attacks.
# WARNING: Use this only with the Docker executor, if you use it with Shell
# you will overwrite your user's SSH config.
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
# In order to properly check the server's Host key, assuming you created the
# SSH_SERVER_HOSTKEYS variable previously, uncomment the following two lines
# instead.
# - mkdir -p ~/.ssh
# - '[[ -f /.dockerenv ]] && echo "$SSH_SERVER_HOSTKEYS" > ~/.ssh/known_hosts'
Gitlabの新参者として、デフォルトのクローン作成プロセスを変更する組み込みの方法も見つけられなかったため、この問題の回避策をハックすることができました(ただし、 完了 )。
自動クローン作成プロセスを無効にする により、before_script
に独自のクローン作成プロセスを記述するだけで、その動作を完全にオーバーライドできます。以下の例では、HTTPクローニングでこれを実現する方法を示していますが、ssh
クローニングに適合させることができます( HTTPクローニングを使用する場合は、組み込みのクローン作成プロセスとconfig.toml ):
「gitlab-runner」という新しいユーザーを作成し、後で使用するためにユーザー認証トークンを生成します(または、場合によっては、sshキーを生成します)。
プロジェクトまたはグループの設定に次の変数を追加して、ランナーのクローン作成プロセスを無効にします:.../settings/ci_cd
キー:GIT_STRATEGY
値:なし
次のようなbefore_script
にリポジトリをクローンします。
before_script: ##作業ディレクトリのクリーンアップ -BUILD_DIR =/home/gitlab-runner/builds/$ RUNNER_TOKEN/0 -CLONE_DIR = "$ BUILD_DIR /$CI_PROJECT_PATH" -cd $ BUILD_DIR -rm -rf $ CLONE_DIR -mkdir -p $ CLONE_DIR ##プロジェクトの複製毎回(非効率、既に存在する場合は代わりにフェッチを実行することを検討してください) -git clone http:// gitlab-runner:$ GITLABRUNNER_USER_AUTH_TOKEN @ server:8888/$ {CI_PROJECT_PATH} .git $ CLONE_DIR -cd $ CLONE_DIR
注:スクリプトでハードコーディングするのではなく、ステップ2で構成した関連変数を以下に示します。
RUNNER_TOKEN
:実行しようとしている特定のランナーの管理「ランナー」メニューにリストされている「ランナートークン」の値。GITLABRUNNER_USER_AUTH_TOKEN
:これは、手順1で生成した認証トークンです。