2
1

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 Actionsでprivate repoからpod installしたかった話

Last updated at Posted at 2020-04-19

(追記)Basic認証で簡単ぞと言うアドバイスをいただいて更新しました!ありがとうございます!

経緯

もともとXcodeプロジェクトのプルリクをトリガーに、Dangerによるプルリクのチェックをしていました。
が、Swaggerで作成したAPIクライアントのプライベートリポジトリがPodfileに追加されたことで、pod installが失敗するようになってしまった、という経緯です。

AccessTokenによる認証で解決

SSH鍵を設定して行う方法(結論〜以降のセクション)でも目的を果たすことができましたが、アドバイスをいただき、Personal Access TokenによるBasic認証でスマートに行うことができました!

トークン発行

発行は https://github.com/settings/tokens こちらから行えます(Settings > Developer settings > Personal access tokens)

適当なメモを残し、repoにチェックを入れます
スクリーンショット 2020-04-19 16.04.23.png

これだけでした。あとは生成した後に表示されるトークンをメモしておきましょう。
同じトークンは二度とGithub上で表示することはできません!(再生成になります)

PodfileのURLに書き換える

もとURLが、
https://github.com/dazy1030/TestRepository.git
でトークンが、
abc123
だった場合Basic認証を使用したURLは、
https://abc123:x-oauth-basic:github.com/dazy1030/TestRepository.git
となります。
一度ローカルの環境でcloneできるか試しておくと良いと思います。

これだけでpod install成功しました!

SSHのときの欠点

以下の点からBasic認証の方が良いなと感じました。

  • 設定までの作業が多い
  • 該当リポジトリにSSH登録したユーザーと同じ権限でしか振る舞えない
  • ローカル環境ではhttpsでpod installしていた場合、sshに変更した際にプロジェクトに参画しているユーザーみんなにssh設定を行ってもらわなければならない(もともとしておけって話ではあるが)

以下SSHによる方法

結論

ワークフローのyamlはこんな感じになりました(無駄とかaction古くね?ってのあると思います。アドバイスお願いします…)

workflow.yml
name: Danger

on: [pull_request]

jobs:
  build:
    runs-on: macos-latest

    steps:
    - uses: actions/checkout@v1
    
    - name: Setup SSH
      env:
        SSH_PRIVATE_KEY: ${{ secrets.ACTIONS_SSH_PRIVATE_KEY }}
      run: |
        mkdir -p ~/.ssh
        ssh-keyscan github.com > ~/.ssh/known_hosts
        echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa && chmod 600 ~/.ssh/id_rsa

    - name: Setup ruby
      uses: actions/setup-ruby@v1
      with:
        ruby-version: '2.6'

    - name: Cache bundle
      uses: actions/cache@v1
      with:
        path: vendor/bundle
        key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }}
        restore-keys: |
          ${{ runner.os }}-gem-

    - name: Bundle install
      run: |
        gem install bundler
        bundle config path vendor/bundle
        bundle install --jobs 4 --retry 3

    - name: Cache CocoaPods
      uses: actions/cache@v1
      with:
        path: Pods
        key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }}
        restore-keys: |
          ${{ runner.os }}-pods-

    - name: Pod install
      run: bundle exec pod install

    - name: Run danger
      run: bundle exec danger

フローをざっくり言うと、

  1. チェックアウト
  2. SSHできるように設定
  3. Gemfileからbundle install
  4. (CococaPodsのキャッシュ)
  5. Podfileからbundle exec pod install
  6. bundle exec danger

今回手を加えたのは2.の部分だけでした。

SSHの設定

ssh-keyを作成

まず、actionを実行するマシンのssh-keyを作成します。
本当は実行するマシン内で作成して〜ってのが正規手順っぽくて良いのですが、実行環境の保存やら初回実行時やら考えるのが面倒だったので、外の環境で作成しました。

秘密鍵をactionの実行マシンに配置する

actions内で作成した秘密鍵を持たせるために、Secretsに環境変数として登録します
https://github.com/{ユーザー名}/{レポジトリ名}/settings/secrets
で登録できます。
登録後は、action内で(ACTIONS_PRIVATE_KEYと名付けたとします)

env: 
  PRIVATE_KEY: {{ secrets.ACTIONS_PRIVATE_KEY }}

のように呼び出すことができます。
そうしたら、~/.ssh/id_rsaにおいてやるだけです。

ssh-keyscan github.com > ~/.ssh/known_hosts
はyes/no聞かれた時に失敗しちゃわないかな…と思い付けたのでちゃんと役目があるか確認できてません

Githubアカウントに公開鍵を登録

SSHでアクセスできるように公開鍵の方をアカウントに紐づけておきます。
https://github.com/settings/keys
ここから登録できます。
これでSSHでgithubにアクセスできるようになりました。
(今回は、個人のアカウントではなくプロジェクトのアカウント的なのが存在したので、そのアカウントに紐付けましたが個人でやるときは微妙かもしれませんね…)

最後に忘れずにPodfileのリポジトリのアドレスをssh://~に直して完了です。

かんそー

Github Actionsはまだまだ進化の途中って感じなので確立した運用にはまだかかりそうだなーと思いました。

2
1
1

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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?