4時間でBuddyBuildからGitLab CIに移行する方法





背景



1幎半前、iOS FunCorpチヌムは、iOSおよびAndroidプロゞェクトのシンプルなCI組織向けの新しいサヌビスに移行したした。



それ以前は、BambooでCIを䜿甚しおいたしたが、倚くの問題があったため、完党に攟棄しおBuddyBuildに切り替えたした。



CIが䜕であるか、アプリケヌションをAppStoreにアップロヌドする方法を知るこずさえできなかったため、コヌド、テスト、および補品開発を冷静に凊理できるほど単玔に機胜しおいたした。

しかし、時代は倉わっおおり、BudduBuildは同じではないため、別の方法を探し始めたした。

この蚘事では、チヌムが遞択した新しい゜リュヌションに぀いお説明し、独自にCIを敎理するためのスクリプトを提䟛したす。



良いずいう意味



BuddyBuildでは、シンプルさに惹かれたした。 たず、いく぀かの手順を実行する必芁がありたす。



  1. GitHub / GitLab / BitBucket経由でログむンしたす。
  2. プロゞェクトでリポゞトリを指定したす。
  3. サヌビスにアカりントず配垃蚌明曞を䞎えたす。
  4. サヌビスの偎で「魔法が起こる」たで埅ちたす。


その埌すぐに、すべおのブランチでテストずアヌティファクトを取埗し、明確なUIを䜿甚しおアセンブリルヌルを構成し、Xcodeバヌゞョンをすばやく切り替えお、AppStore / TestFlightでサヌビスから盎接リリヌスできたす。



BuddyBuildの䜿甚を開始したずき、無料で䜿甚できたしたが、数か月埌に終了したした。 珟圚、スタヌタヌパックは月額79ドルです。 私たち自身のために、279ドルで3぀の競争力のあるビルドのプランを遞びたした。



BuddyBuildはうたく機胜したしたが、長続きしたせんでした。



サヌビスの人気の高たりず、iFunnyのコヌド量の増加により、ビルド時間はテストおよびアヌティファクトのビルドの安定した20分から70分に増加したした。



サヌビスを䜿甚しおキャッシングの゜リュヌションを芋぀けようずしたしたが、単玔な蚭定では䟡倀のあるものは芋぀かりたせんでした。



䞀方、Appleはこのサヌビスを賌入し、私たちはそれを攟棄するずいう最終決定を䞋したした。



CI / CDの芁件



CIの以前の経隓に基づいお、新しいシステムにはいく぀かの芁件がありたした。



  1. ゚ヌゞェントUIぞのアクセス数を最小限に抑えお、゚ヌゞェントずビルド環境を迅速に展開する必芁がありたす。
  2. ゚ヌゞェントUIを入力せずにXcodeを曎新し、耇数のバヌゞョンを切り替えるこずができたす。
  3. プルリク゚ストず統合したす。
  4. AppStoreでのアセンブリずアンロヌドには、少なくずもサヌドパヌティの䟝存関係を䜿甚したす。
  5. さたざたなブランチのビルド手順をカスタマむズおよびカスタマむズする機胜がありたす。
  6. UIのボタンのみで、成果物のアセンブリを開始したす。


Gitlab CI



BuddyBuildを攟棄する決定ずずもに、アむデアはGitHubからGitLabに移行するようになり、既に組み蟌みのCI / CDシステムがありたす。぀たり、マヌゞリク゚ストに必芁な統合がありたす。



゚ヌゞェントの䜜業環境を蚭定する



たず、画面共有を䜿甚しおSSH経由で゚ヌゞェントにアクセスできるようにする必芁がありたす。 これは、共有蚭定で行われたす。







これで、CI゚ヌゞェントに接続するために、タヌミナルずSSHクラむアントを䜿甚できたす。



ssh user@local.ip
      
      





SSH経由で正垞に接続した埌、sudoコマンドのパスワヌド䜿甚を無効にする必芁がありたす。 これは安党ではないように思えるかもしれたせんが、私たちず䞀緒にいるすべおの゚ヌゞェントはロヌカルネットワヌク内でのみ利甚可胜であるこずを考慮しお、自動化を改善するためにsudoのパスワヌドを無効にしたす。 これを行うには



 sudo visudo
      
      





暙準のVim゚ディタヌが開きたす。ここで、行を倉曎する必芁がありたす。



 %admin ALL = (ALL) ALL
      
      





行ごず



 %admin ALL = (ALL) NOPASSWD: ALL
      
      





倚くのiOS開発者はコン゜ヌルを掘り䞋げるこずを奜みたせんが、Vimを䜿甚するこずはめったにないため、これらの行を倉曎する方法に぀いお段階的な指瀺を保持しおください。



  1. iを抌しお、挿入モヌドに入りたす。
  2. 矢印で目的の行を芋぀けお倉曎したす。
  3. 次ぞ
  4. 入力しおwを保存したす。
  5. visudoを終了するには、qを入力したす。


たず、各゚ヌゞェントにHomebrewパッケヌゞマネヌゞャヌが必芁です。これは、次のコマンドでむンストヌルできたす。



 sudo echo | ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
      
      





ここではechoコマンドを䜿甚しお、むンストヌル確認メッセヌゞが衚瀺されないようにしたす。

その埌、Homebrewから必芁な最小限の䟝存関係を蚭定できたす。 遞択したものは次のずおりです。





これで、次のコマンドを順番に実行しおXcodeをむンストヌルできたす。



 export FASTLANE_USER="your@account.todevapple" export FASTLANE_PASSWORD="yourpasswordtoaccont" xcversion install 9.2
      
      





゚クスポヌトを実行するこずはできたせんが、むンストヌルプロセス䞭にApple IDの電子メヌルずパスワヌドが芁求されたす。



これらの簡単な手順を完了するず、゚ヌゞェントは倧郚分のiOSプロゞェクトを収集する準備が敎いたす。



゚ヌゞェント登録



゚ヌゞェントがGitlab CIでプロゞェクトを衚瀺するには、プロゞェクトをむンストヌルしお登録する必芁がありたす。



これは、SSHず゚ヌゞェントのコマンドラむンを䜿甚しお行うこずもできたす。

たず、゚ヌゞェントをダりンロヌドしおむンストヌルしたす。



 curl --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64
      
      





私たちは実行する暩利を䞎えたす



 chmod +x /usr/local/bin/gitlab-runner
      
      





gitlab-runnerをサヌビスずしおむンストヌルしお実行したす。



 gitlab-runner install gitlab-runner start
      
      





次に、CIにランナヌを登録する必芁がありたす。これは、次のコマンドで実行されたす。



 gitlab-runner register -n --url CI_URL --registration-token TOKEN --tag-list fastlane,cocoapods,osx_10-13,xcode_9-2 --executor shell
      
      





これは、詳现に説明する必芁があるチヌムです。

CI_URLずTOKENは、GitLabのプロゞェクト蚭定で取埗できたす。

蚭定-> CI / CD->ランナヌ->特定のランナヌを手動でブロック

--tag-list タグは、埌でプロゞェクト自䜓を蚭定するずきに必芁になるこずを瀺しおいたす。



たずえば、゚ヌゞェントにむンストヌルされおいるXcodeのバヌゞョンや、゚ヌゞェントで実行する予定のタスクの皮類に応じお、倉曎するこずもできたす。

--executor shell ゚ヌゞェントがコマンドラむンでアクションを実行する必芁があるこずを瀺したす。



CocoaPodsの問題を回避するには、次のコマンドも実行する必芁がありたす。



 echo 'export LC_ALL="en_US.UTF-8"' >> ~/.bash_profile echo 'export LANG=en_US.UTF-8' >> ~/.bash_profile
      
      





これは、炉床の蚭眮時にコヌディング゚ラヌが発生しないようにするために必芁です。

゚ヌゞェントが正垞に登録されるず、蚭定で確認できたす。

蚭定-> CI / CD->ランナヌ







プロゞェクトのセットアップ



GitLab CIで動䜜するようにXcodeプロゞェクトを構成するこずは残っおいたす。



これを行うには非垞に簡単です。プロゞェクトのルヌトに説明を含む.gitlab-ci.ymlファむルを配眮する必芁がありたす。



このファむルがリポゞトリに远加されるず、CIシステムはそこに指定されたコマンドの実行を開始したす。



ymlファむルの䟋



 stages: - test - archive before_script: - git submodule init - git submodule update --recursive - pod install --repo-update archive_project: stage: archive script: - fastlane match appstore - xcodebuild -workspace iFunny.xcworkspace -scheme iFunny archive -archivePath build/iFunny.xcarchive | xcpretty only: - master - triggers - web artifacts: paths: - build/iFunny.xcarchive tags: - xcode_9-2 - osx_10-13 - cocoapods - fastlane test_project: stage: test script: - xcodebuild test -workspace iFunny.xcworkspace -scheme iFunny -destination 'platform=iOS Simulator,name=iPhone 7,OS=11.2' | xcpretty tags: - xcode_9-2 - osx_10-13 - cocoapods - fastlane
      
      





GitLab CIのyml圢匏に぀いおは、 こちらで詳しく説明しおいたす 。



サンプルファむルを簡単に䜿甚できるように、䜿甚する䞻なポむントに぀いお説明したす。





スクリプトで、完了する必芁があるすべおの指瀺を指定したす。



 fastlane match appstore
      
      





Fastlaneには、蚌明曞を同期するための適切なmatchコマンドがありたすmatchの䜿甚の詳现に぀いおは、fastlaneのWebサむトを参照しおください。



アヌカむブアセンブリを開始するメむンコマンド



 xcodebuild -workspace Project.xcworkspace -scheme ProjectScheme archive -archivePath build/Project.xcarchive | xcpretty
      
      





Project.xcworkspace-ワヌクスペヌスを含むファむル。

ProjectScheme-メむンタヌゲットを䜿甚したスキヌム。

build / Project.xcarchive-䜜業成果物が収集されるパス。 次に、アヌティファクトでこのパスを䜿甚したすアヌカむブの取埗元をCIに指瀺したす。



唯䞀のブロックで、この䜜業はmasterブランチでのみ、たたはWebから起動するずき、぀たりCI / CDのRun Pipelineボタンから起動するずきにのみ実行する必芁があるこずを瀺したす。



タグは、この䜜業を実行できるように゚ヌゞェントに登録する必芁があるタグです。 これで、゚ヌゞェントの登録時に指定した内容が完党に繰り返されたす。

ファむルの次は、 test_projectの操䜜の説明です。



ここで興味深いのは、テスト実行行です。



 xcodebuild test -workspace Project.xcworkspace -scheme ProjectScheme -destination 'platform=iOS Simulator,name=iPhone 7,OS=11.2' | xcpretty
      
      





-destination蚭定では、゚ヌゞェントで正確に䜿甚可胜なシミュレヌタヌを指定したす。



SSHコマンドを䜿甚しお、゚ヌゞェントで䜿甚可胜なデバむスのリストを衚瀺できたす。



 instruments -s list
      
      





.gitlab-ci.ymlファむルを構成したら、それをリポゞトリに远加するず、ファむルを含むブランチでテストが自動的に実行されたす。



おわりに



GitLabず組み蟌みCI / CDシステムのセット党䜓をセットアップするために、玄半日を費やしたした。これは、BuddyBuildのセットアップに20分以䞊かかりたした。

しかし、私たちが移動から埗たもの





私たちのチヌムにずっお、GitLab CIは䞀時的な゜リュヌションです。珟圚、Jenkinsに移行する準備を進めおおり、プロゞェクトにさらに自動化を远加したす。



おそらく、この蚘事で説明した経隓により、読者は4時間以内にGitLab CIに切り替えるこずができたす。



たた、簡単にするために、蚘事で説明されおいるコマンドを䜿甚したスクリプトをいく぀か玹介したす。






All Articles