web-dev-qa-db-ja.com

Docker内でFastlaneを使用してiOSアプリを構築する

私は私のiOS開発ビルドを合理化し、Dockerについて読んでいます。

私がそれを正しく理解していれば、すべての依存関係を含むイメージを作成でき、他の開発者がそれをプルしてその中にビルドできます。

ポイントは今ですが、これはFastlane(私の考えているXcode CLIツールを使用します)および「Mac用Docker」でも動作しますか?

また、私はReact-Nativeを使用していますが、これはnativeビルドに含まれるJavaScriptをバンドルするための2番目のプロセスを開始し、Dockerは1つのプロセスしか許可しないことを読み取りますが、これは問題です?

11
K..

Dockerの使用に関する問題は、Mac用のDockerを使用しても、macOSベースのイメージにアクセスできないことです。 Dockerは xhyve と呼ばれる軽量の仮想マシンで実行されます-少なくともMac用のDockerパッケージを介してdockerをインストールする場合-MacでLinuxを実行します。

基本的に、これが意味することは、Dockerコンテナーが非Xcode機能に制限されることです。これは、少なくとも重要な作業がなければ、絶対にできないことです。

  • アプリのネイティブコードをコンパイルする
  • アプリのスクリーンショットを撮るか、シミュレータでアプリを実行します
  • 完成したアプリにAppleのcodesignで署名する

Dockerコンテナーを潜在的に使用できるものは次のとおりです。

  • JSコードの作成(RNはLinuxで動作するはずなので、私はそう思います)
  • ITMSTransporterを使用したアプリのアップロード(つまり、fastlaneのdeliverを使用)
  • 証明書、プロビジョニングプロファイル、およびプッシュ証明書のダウンロード/作成(つまり、fastlaneのmatchcertpemおよびsigh
  • Gitの操作

全体として、おそらく非常に制限されます。代わりに、GemfileBrewfileなどを使用してすべての依存関係を一覧表示し、setup.shおよびbrew bundleを実行して同僚のマシンにインストールする小さなbundle installスクリプトを作成することをお勧めします。 (Xcodeのスクリプトビルドフェーズを使用して)ビルド中にこれらを実行するように設定して、ビルドに必要なものを誤ってインストールするのを忘れないようにすることもできます。

そうは言っても、作業中のfast-lane Dockerイメージがあります hereDocker Hub でも利用できます。ファストレーンテスト(macOS専用ソフトウェアに依存しない)を実行するためにテストされたことがあるので、実際にファストレーンを確実に実行するとは主張していないことに注意してください。

Dockerを読むと1つのプロセスしか許可されません

Dockerは複数のプロセスを許可しますが、複数のメインプロセスを許可しません。メインプロセスが他のすべてを停止し、コンテナーがそれで停止した場合。依存関係をインストールするためにそれを使用して、長期実行サービスをホストする代わりにそれらを使用する1回限りのコマンドを実行できるようにしたい場合は、docker runを使用していつでも実行できます。

docker run <repo/image:tag> <your_command>

または、インタラクティブなシェルをコンテナに起動します。

docker run -it <repo/image:tag> /bin/bash
20
milch