社内で扱うGithubのPrivate Repositoryで、別の社内Private Repositoryをsubmoduleをチェックアウトするときのメモ
問題
単純にPrivate Repositoryから、別のPrivate RepositoryをSubmoduleとして登録するだけだと、Github Action内でチェックアウトしてもURLが見つからずエラーになる
上のissueでも言及されている
参考
次の記事に書かれていることを行った
解決策
今回、submoduleはsshで取り込んでいたため(git@~~
)、ssh方式で取り込むことにした。また参考にしたページでも触れられているように、tokenを用いる方法も存在する。セキュリティの観点などから、今回はssh鍵を作成する方法をとることにした。
1. ssh鍵の作成
まず自分のローカルPCでsshの鍵を作成する。コマンドは次の通りである。
$ ssh-keygen -t rsa -C ""
ただしこの時、パスワードは指定しない(指定しても良いかもしれないが、Github Action側で処理を行う必要があると考えられる)。
-t
で鍵の種類を指定することができる(デフォルトでもRSAだが指定した)。-C
でコメントを指定することができる。-C
を指定しない場合、自分のローカルPCの名前が入るため、何も入れたくない場合は上記のように""
を指定するのがよい。
注意点として、デフォルトでは鍵の名前が$HOME/.ssh/id_rsa
であり、既に存在する場合は上書きされるため、必要ならば別ディレクトリに保存する必要がある。
2. 鍵の登録
いま、手元に秘密鍵id_rsa
と公開鍵id_rsa.pub
があるとする。行うことは、
- 秘密鍵
id_rsa
をPrivate Repository(submoduleを登録してあるRepository)に置く - 公開鍵
id_rsa.pub
をSubmoduleのPrivate Repositoryに置く
ことである。
まず秘密鍵をPrivate RepositotyのSetting -> Secrets -> Repository secretsに置く。このSecretの名前をSSH_KEY
と呼ぶことにする。
次に公開鍵をSubmoduleとして登録したPrivate RepositoryのSetting -> Deploy Keysに置く。
注意点は秘密鍵を登録する際、
-----BEGIN OPENSSH PRIVATE KEY-----
body
-----END OPENSSH PRIVATE KEY-----
と、ヘッダーとフッターにあたる-----BEGIN OPENSSH PRIVATE KEY-----
と-----END OPENSSH PRIVATE KEY-----
を含める必要があることである。
3. workflowのyamlに記述
Github Actionを利用するためには、.github/workflow
内のYAMLファイルを記述する必要がある。Submoduleをcheckoutするために、jobに次のように記述する。
- uses: actions/checkout@v2
- name: ssh setting
env:
TOKEN: ${{ secrets.SSH_KEY }}
run: |
mkdir -p $HOME/.ssh/
echo -e "$TOKEN" > $HOME/.ssh/id_rsa
chmod 600 $HOME/.ssh/id_rsa
- name: Checkout
shell: bash
run: |
git submodule sync --recursive
git submodule update --init --force --recursive
まず秘密鍵をenv
にて指定している。ここでの名前は、秘密鍵の名前(secretsに登録したときの名前)にする必要がある。この秘密鍵をホームディレクトリの.ssh
ディレクトリの下にコピーし、読み取り権限を与えている。これでprivate repositoryからもってきたsubmoduleをcheckoutすることができる。