1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Github Action内でPrivate SubmoduleをPrivate Repositoryからチェックアウトする

Posted at

社内で扱う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することができる。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?