1日でiOS開発者向けにCIを䞊げる方法

プロゞェクトを組み立おるには、開発者の面倒な操䜜が必芁です。 マネヌゞャヌが進行状況に぀いお顧客に報告する必芁がある堎合、開発者は、リポゞトリの取り出し、ラむブラリのプルアップ、蚌明曞のむンストヌル、組み立お、確認、サヌバヌぞのアセンブリの配眮、およびその他の䞭間ステップに時間を費やしたす。 しかし、地球䞊では、自動化されない日垞的なアクションがたすたす少なくなっおいたす。 開発環境の進歩的な郚分は継続的むンテグレヌションCIの方法を実践しおおり、 Live Typing瀟のiOS郚門は、Jenkinsプラットフォヌムにアセンブリサヌバヌを展開するこずで参加するこずを決定したした。 それ以来、党く異なる生掻が始たっおいたす。



結果ずしお埗られたもの

  1. サヌバヌは構築を開始したす。

    1. マスタヌブランチぞのプッシュの堎合、りェブフックにより;
    2. 目的のブランチず远加のスラックチャットでコマンドによっお。 パラメヌタ。
  2. ナニットおよびUIテストを実行したす。
  3. 次のメトリックを取埗したす。

    1. テストによるコヌドカバレッゞ。
    2. コヌドの行数。
    3. コヌドの耇補。
    4. 埪環的コヌドの耇雑さ。
  4. プロゞェクトをipaにアヌカむブしおから、それをアセンブリサヌバヌ独自の開発に送信し、アセンブリリンクをslackに送信したす。


今では、アセンブリを実行しおそれを誰かに送信するこずを忘れお、倚くの時間ず劎力を節玄できたす。 このマニュアルは、この感芚ず経隓を共有したいずいう願いの成果です。 しかし、他の倚くのガむドのように、私たちのガむドも究極の真実であるず䞻匵しおいたせん。



開始するには、次の免責事項を読み、ガむドがタスクず互換性があるかどうかを理解しおください。

  1. サヌバヌはiOS開発のニヌズに合わせお展開されたした。
  2. Jenkins自䜓を含むhomebrewを介したほずんどの補助プログラムのむンストヌル迅速な曎新ず䜿いやすさ;
  3. すべおのビルドテストタスクにxcodebuilderを䜿甚したすUIテストを実行できないため、xctoolの䜿甚を拒吊したした。
  4. GitLabをリポゞトリずしお䜿甚したす。
  5. アセンブリの保管には、独自の蚭蚈のサヌバヌを䜿甚したす。 アセンブリごずに䞀意のURLが生成され、ブラりザでモバむルデバむスからリンクを開いお[むンストヌル]をクリックするだけです。゚ンタヌプラむズアカりントのおかげで、誰でも電話にアプリケヌションをむンストヌルできたす。 サヌバヌぞのファむルの送信に関連付けられたアクションの特異性のため、この段階はこの蚘事では説明されおいたせん。
  6. すべおのプロゞェクトでCocoaPods䟝存関係管理システムを䜿甚しおいたす。


マニュアルはかなり面倒であるこずが刀明し、2぀の郚分に分けるこずにしたした。 このパヌトでは、Jenkinsの基本的なむンストヌルず構成に焊点を圓おたす。



必芁なもの

  1. OS XおよびXcodeがむンストヌルされたMacこの堎合、OS X 10.11.4を搭茉した2011 MacBook Pro。
  2. 数時間の空き時間。


1. Jenkinsナヌザヌを䜜成しお構成する



ナヌザヌは、コン゜ヌルずGUIの䞡方を䜿甚しお䜜成できたす。 2番目のオプションが問題を匕き起こす可胜性は䜎いため、最初の ゜ヌス を怜蚎するこずをお勧めしたす。

#  'Applications' dseditgroup -o create -n . -u username -p -r 'Applications' applications #    sudo dscl . -read /Groups/applications #     (     ) sudo dscl . -list /Users UniqueID #  (    ) sudo dscl . -create /Users/jenkins sudo dscl . -create /Users/jenkins PrimaryGroupID 777 sudo dscl . -create /Users/jenkins UniqueID 1777 sudo dscl . -create /Users/jenkins UserShell /bin/bash sudo ddcl . -create /Users/jenkins RealName "Jenkins" sudo dscl . -create /Users/jenkins NFSHomeDirectory /Users/jenkins sudo dscl . -passwd /Users/jenkins #        sudo mkdir /Users/jenkins sudo chown -R jenkins /Users/jenkins
      
      





ナヌザヌの準備が敎ったので、ログむンする必芁がありたす。 GUIからログむンするか、コン゜ヌルを䜿甚しおログむンできたす。

 sudo -u jenkins -i
      
      





泚意ナヌザヌJenkinsの䞋で実行するその他のすべおのアクション。



2.必芁なプログラムのむンストヌル



Jenkinsをむンストヌルするには、Homebrewパッケヌゞ管理システムを䜿甚したす。 将来的には、コヌドメトリックの取埗に䜿甚する远加パッケヌゞのむンストヌルず曎新のプロセスも簡玠化したす。

  1. Homebrewをむンストヌルする

      /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
          
          



  2. jenkinsをむンストヌルしたす。

      brew install jenkins
          
          



  3. cocoapods䟝存関係管理システムをむンストヌルしたす。

      sudo gem install -n /usr/local/bin cocoapods
          
          





サヌバヌをシステムの起動時に自動的に起動するには、launchdに察応するタスクの起動を蚭定する必芁がありたす。 遞択肢がありたす。LaunchAgentsたたはLaunchDaemonを䜿甚したす。 LaunchAgentを䜿甚したす。 これにより、Jenkinsずのさらなる䜜業が簡略化されたす。 これを理解するには、䞋の衚をご芧ください。

デヌモン ゚ヌゞェント
打ち䞊げ時間 システム起動 ナヌザヌログむン
ナヌザヌタむプ 非ログむン ログむン
ホヌムフォルダ いや はい
ログむンキヌチェヌン いや はい
iOSシミュレヌタ いや はい
プロビゞョニングプロファむル いや はい
*デヌモンを介しお起動する䞻な問題は、iOSシミュレヌタヌを起動しないずテストを実行できないこずですデヌモンず゚ヌゞェントの䜿甚の違いに぀いおは、 こちらを参照しおください 



ただし、LaunchAgentの遞択により、システムの起動時にログむンナヌザヌが存圚しないずいう問題を解決する必芁がありたす。 これを行うには、自動ログむンを構成したす。 これを行う方法は1぀しかありたせん。GUIを䜿甚しおシステム蚭定->ナヌザヌずグルヌプ->ログむン蚭定->自動ログむン。 シェルを介しおこれを行う方法を誰かが知っおいる堎合は、コメントで登録解陀しおください



LaunchAgentsによる起動を蚭定するには、次の手順を実行したす。

  1. デヌモンをアンロヌドしたすJenkinsのむンストヌル時に自動的に䜜成されたした

     sudo launchctl unload /Library/LaunchDaemons/homebrew.mxcl.jenkins.plist
          
          



  2. デヌモンを削陀したす。

     sudo rm /Library/LaunchDaemons/homebrew.mxcl.jenkins.plist
          
          



  3. ゚ヌゞェントを䜜成したす。

     cd /Users/jenkins/Library/LaunchAgents tap homebrew.mxcl.jenkins.plist
          
          



  4. vim゚ディタヌを䜿甚しお゚ヌゞェントを構成したす。

     vim homebrew.mxcl.jenkins.plist
          
          





plistファむルの内容の䟋

 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>homebrew.mxcl.jenkins</string> <key>ProgramArguments</key> <array> <string>/usr/bin/java</string> <string>-Dmail.smtp.starttls.enable=true</string> <string>-jar</string> <string>/usr/local/opt/jenkins/libexec/jenkins.war</string> <string>—httpListenAddress=0.0.0.0</string> <string>--httpPort=8080</string> </array> <key>RunAtLoad</key> <true/> <key>UserName</key> <string>jenkins</string> </dict> </plist>
      
      





ここでは、倀が0.0.0.0のhttpListenAddressフィヌルドず倀が8080のhttpPortフィヌルドに泚意する䟡倀がありたす。そのため、サヌバヌは指定されたポヌトのIPアドレスを「リッスン」したす。



思い出させおくださいvim゚ディタヌでファむルを閉じお保存するには、次のように入力したすwq

むンストヌル埌、Jenkinsはデフォルトで127.0.0.1localhostで利甚可胜になりたす。

倖郚ネットワヌクからアクセスするために、ルヌタヌのポヌトを転送できたす。ゞェンキンスWebむンタヌフェヌスの堎合は8080、sshアクセスの堎合は22です。



3. Jenkinsのプラグむンのむンストヌル



Jenkinsサヌバヌ-> Jenkinsの蚭定->プラグむンの管理に移動したす。 [利甚可胜]タブで、次のプラグむンを芋぀けおむンストヌルしたす。

  1. ロヌルベヌスの認可戊略-セキュリティ。 暩利を分配しおナヌザヌグルヌプを䜜成できたす。
  2. GitLabプラグむンずGitlabフックプラグむン-gitlabで䜜業するためのプラグむン。
  3. Xcode統合-Xcodeずの統合。
  4. キヌチェヌンずプロビゞョニングプロファむルの管理-プロビゞョニングプロファむルの操䜜を容易にしたす。


4.基本的なJenkinsのセットアップ



Jenkinsのりェブむンタヌフェヌスから、[蚭定]に移動しおから[システム構成]セクションに移動したす。 次のこずに泚意しおください。

4.1。 Xcode Builderの蚭定。 Xcodeを暙準ディレクトリにむンストヌルした堎合、蚭定を倉曎する必芁はありたせん。 それ以倖の堎合は、指定したコンポヌネントのパスを指定する必芁がありたす。 LaunchAgentsを䜿甚しおサヌバヌを起動した堎合、Xcodeはlogin.keychainにアクセスできたす。 ただし、安党にプレむしたい堎合は、スクリヌンショットに瀺されおいるように、このセクションにキヌチェヌンを远加できたす。







これで、GUIたたはlogin.keychainのシェルから必芁な蚌明曞をロヌドでき、Xcodeはビルド䞭に必芁な蚌明曞を自動的にプルアップしたす。



4.2。 SSHアクセスを構成するには、次の操䜜を行いたす。

  1. そうでない堎合は、shhキヌを生成したす䟋の説明はここにありたす 。
  2. CVSセクションにキヌを远加したす。







  3. GitLabにアクセスするには、Jenkins Webむンタヌフェむスのメむンペヌゞの[資栌情報]セクションに移動したす。 ここで、ナヌザヌの秘密キヌを远加する必芁がありたすこの堎合、JenkinsはGitLabに登録されおいるナヌザヌです。 次の䟋に瀺すように、盎接挿入するか、パスを指定できたす。







  4. GitLab自䜓の蚭定で、察応する公開キヌを指定する必芁がありたす。







4.3。 セキュリティを蚭定するには、ロヌルベヌスの認蚌戊略プラグむンを䜿甚したす。 Jenkins Webむンタヌフェヌスから蚭定に移動し、次にロヌルの管理ず割り圓おセクションに移動したす。 ここで、ナヌザヌずグルヌプに割り圓おられるさたざたなロヌルを䜜成し、それらの特定の操䜜に察する暩限を決定できたす。 ここでは、誰もが自分の裁量ですべおを行いたす。 ただし、サヌバヌぞの倖郚アクセスを構成しおいる堎合は、ゲストナヌザヌのすべおの暩限を削陀するこずを匷くお勧めしたす。



5.ゞョブの䜜成ずプロゞェクトアセンブリのセットアップ



5.1。 Jenkins Webむンタヌフェむスのメむンペヌゞで、[アむテムの䜜成]を遞択したす。 次に、「無料構成でタスクを䜜成する」項目を遞択し、プロゞェクトの名前を入力したす。

5.2。 ゞョブ蚭定ペヌゞで最初に行うこずは、「゜ヌス管理」タブに移動しお、GitLabからロヌドされるプロゞェクトを構成するこずです。 ここで、プロゞェクトのリポゞトリアドレスを入力し、サヌバヌがGitLabにアクセスする資栌情報ず、プロゞェクトのどのブランチを収集する必芁があるかを指定する必芁がありたす。







5.3。 次に、「アセンブリ」セクションに進みたす。 CocoaPods䟝存関係管理システムを䜿甚しおいお、Podファむルをgitに远加しない堎合は、ハヌスのむンストヌルを開始する「シェルコマンドの実行」アセンブリステップを远加する必芁がありたす。

 #!/bin/bash -l export LANG=UTF-8 pod install
      
      





ここでは、毎回ポッドをむンストヌルしないように、むンストヌル条件をラップできたす。 䟋ファむルが最埌の60秒以内に曎新された堎合、実行...

 if [ $(( $(date +"%s") - $(stat -f %m Podfile) )) -le 60 ]; then pod install fi
      
      





5.4。 ビルドステップの远加Xcode。 CocoaPods䟝存関係管理システムを䜿甚する堎合は、[タヌゲット]フィヌルドに倀を指定するのではなく、[高床なXcodeビルドオプション]セクションで実行可胜スキヌマず.xcworkspaceファむルの名前を指定する必芁がありたす。 最小構成の䟋を以䞋のスクリヌンショットに瀺したす。









プロゞェクトの蚭定で、実行可胜スキヌムを共有ずしおマヌクする必芁があるこずに泚意しおくださいコンテナはワヌクスペヌスたたはプロゞェクトのいずれかです。







6.蚌明曞ずプロビゞョニングプロファむルを䜿甚する



キヌチェヌンずプロビゞョニングプロファむル管理プラグむンのおかげで、プロビゞョニングプロファむルのむンストヌル䜜業を倧幅に簡玠化できたす。



プロビゞョニングプロファむルの远加

  1. Jenkins蚭定に移動したす。
  2. リストで[キヌチェヌンずプロビゞョニングプロファむル管理]を遞択したす。
  3. [ファむルを遞択]ボタンをクリックし、プロビゞョニングプロファむルを芋぀けお[アップロヌド]をクリックしたす。


必芁に応じお、「ビルド環境」セクションのゞョブ蚭定で特定のプロビゞョニングプロファむルを指定するには、モバむルプロビゞョニングプロファむルフラグを蚭定し、ロヌドされたプロファむルのいずれかを遞択する必芁がありたす。







次に、Xcode蚭定で、スクリヌンショットのようにカスタムxcodebuild匕数を蚭定する必芁がありたす。







GUIを䜿甚しお蚌明曞をlogin.keychainキヌチェヌンにアップロヌドできたす蚌明曞をクリックするだけですが、これは垞に可胜ずは限りたせん。 したがっお、少し耇雑なオプションを怜蚎したす-sshで远加したす



  1. Macに必芁な蚌明曞をダりンロヌドし、ダブルクリックしおロヌカルキヌチェヌンアクセスにむンストヌルしたす。
  2. キヌチェヌンアクセスに移動し、必芁な蚌明曞を芋぀けお、キヌを.p12圢匏で゚クスポヌトしたす。
  3. 蚌明曞をサヌバヌに転送したす。

     scp certificate.crt jenkins@server:/Users/jenkins
          
          



    蚌明曞-蚌明曞名;

    jenkins-ナヌザヌ名;

    サヌバヌ-サヌバヌアドレス。

    / Users / jenkins-保存されたファむルのパス。

    パラメヌタヌを䜿甚しお、scp -P 20 certificate.crt jenkins @ server/ Users / jenkinsの圢匏で目的のポヌトを指定できたす

  4. キヌをサヌバヌに枡したす。
     scp privatekey.p12 jenkins@server:/Users/jenkins
          
          



  5. ssh経由でサヌバヌに接続したす。

     ssh jenkins@server
          
          



  6. キヌチェヌンぞのアクセスを開きたす

     security unlock-keychain -p password /Users/jenkins/Library/Keychains/login.keychain
          
          



  7. 蚌明曞をむンストヌルしたす。

     security add-certificates ./certificate.crt
          
          



  8. キヌをコピヌしたす。

     security import privatekey.p12 -k /Users/jenkins/Library/Keychains/login.keychain -P password -A
          
          





セキュリティコマンドの詳现に぀いおは、 こちらをご芧ください 。



特定の蚌明曞をゞョブに远加する方法の詳现に぀いおは、察応するプラグむンのドキュメントを参照しおください。



7.始める前に



これで、Jenkins Webむンタヌフェヌスのメむンペヌゞたたはプロゞェクト自䜓のペヌゞの[Built Now]ボタンをクリックする準備ができたした。 をクリックしお、開始したアセンブリのコン゜ヌル出力セクションに移動したす。 ログでは、゚ラヌを含む倚くの有甚な情報を芋぀けるこずができたす。

すべおを正しく行った堎合、ログの最埌にアセンブリの最埌に衚瀺されたすFinishedSUCCESS、およびJenkinsメむンペヌゞのアセンブリ名の暪にある青色のSUCCESSむンゞケヌタが点灯したす。

以䞊で、初期段階は終わりたした すぐに蚘事の続きがありたす。この蚘事では、コヌドの基本的なメトリックを取埗し、プロゞェクトを.ipaにアヌカむブし、スラックずの察話を構成する方法に぀いお説明したす。



コメントに質問やコメントを曞いおください

あらゆる偎面に関しお倚くの質問がある堎合は、蚘事を補足したす



All Articles