GitLabの外部リポジトリへの同期機能を使ってクラウドのGitリポジトリと同期する
GitLab CE 10.8の新機能として、外部リポジトリへのプッシュ機能が無償版でも使えるようになりました。
用途としては、GitLabのリポジトリのバックアップとしてパブリッククラウドのGitを使う、クラウド側のCIサービスとの中継点として使用する等が挙げられます。
GitLabの設定
プロジェクトの管理権限を持つユーザで、
Settings
→ Repository
を開きます。
Remote mirror repository
- チェックを入れる- Git repository URL - プッシュする先のリモートリポジトリのURLを入れる。認証情報は
https://USERNAME:PASSWORD@git.example.com/remote.git
(GitLab 11.1まで)、https://USERNAME@git.example.com/remote.git
(GitLab 11.2以降)のように入力する。 - (GitLab 11.2以降)
Authentication Method
でPassword
を選択すると、パスワード入力欄が出るのでそこにパスワードを入力する。 - Only protected branches - チェックを入れると保護されたブランチの更新時のみ同期する。
master
ブランチを保護し、個々のフィーチャーブランチは保護しない場合に使用すると、master
へのMerge Requestが承認された場合のみ同期されるような使い方ができる。またチェックを入れることでプッシュの頻度が5分に一度から毎分一度へ上がるらしい。
この状態でGitLabへgit push
すると、自動的にリモートへプッシュされるようになります。また、Update Now
ボタンを押すと、強制的にプッシュすることができます。
Google Cloud Source Repositoriesの場合
Google Cloud BuildのトリガーはCloud Source Repositories, GitHub.com, Bitbucketのみ対応しています。GitLabからCloud Source Repositoriesへプッシュすれば、Google Cloud Buildのビルドを始めることができます。
以前はGit用のユーザ名・パスワードを取得できたようですが、現在はbash/zshスクリプトを実行してcookieを保存する手順が表示されます。実は表示されるシェルスクリプト内の文字列の一部がユーザ名・パスワードとして利用できることが分かりました。
- 新しいパスワードの生成を開く
- Googleアカウントでログイン
- 「Google Cloud Development が Google アカウントへのアクセスをリクエストしています」の画面が出るので許可
- Configure Git画面が表示される
紫色のテキストボックスの8行目の最後にユーザ名とパスワードがgit-account.example.com=PasswordIsShownHere
のように=
でつながった形式で表示されます。
この例の場合、ユーザ名はgit-account.example.com
、パスワードはPasswordIsShownHere
です(実際のパスワードは数十桁の英数字記号)。
生成されたパスワードは記号を含む場合があるので、URLエンコードしておく必要があります。GitLabに設定するURLは下記のようになります。
https://git-account.example.com:URLEncodedPassword@source.developers.google.com/p/PROJECT-NAME/r/REPOSITORY-NAME
認証情報の無効化
パスワードを無効にするには、Revoke cookies
のリンクをクリックし、Google Cloud Development
の「アクセス権を削除」ボタンをクリックします。
無効化した状態でリポジトリにアクセスしようとすると下記のような認証エラーが出ます。
Invalid authentication credentials. Please generate a new identifier: https://source.developers.google.com/new-password
(参考)gcloud
コマンド(現在は一時的なパスワードしか取れない)
GitLabのIssueには、下記のようにgcloud
コマンドでパスワードを取得する方法が紹介されていますが、現在は発行されるパスワードは一時的に有効なもので、一時間で無効になるようです。
echo $'protocol=https\nhost=source.developers.google.com\n' | gcloud auth git-helper get
AWS CodeCommitの場合
IAMユーザに対してCodeCommit専用のユーザ名とパスワードを生成することができます。
- https://console.aws.amazon.com/iam/home?region=ap-southeast-1#/users/IAM-USERNAME?section=security_credentials を開く ※
IAM-USERNAME
はユーザ名に置換 HTTPS Git credentials for AWS CodeCommit
という項目の中にあるGenerate
ボタンを押すとユーザ名(IAM-USERNAME-at-123456789012
のようにIAMユーザ名とAWSアカウント番号から生成される)とパスワードが生成される
なおユーザ名・パスワードは2組まで生成することができます。
GitLabに設定するURLは下記のようになります。
https://IAM-USERNAME-at-123456789012:GeneratedPassword@git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/REPOSITORY-NAME