ゞェンキンスを䜜る方法はあなたの人生を楜にし、幞せになる

䌚瀟のモバむルアプリケヌションの開発が産業基盀に切り替わるず、自動アセンブリの問題が必ず浮䞊したす。 継続的むンテグレヌションは、プロセスの䞍可欠な郚分です。 このプロセスの結果は、顧客およびリモヌトテスタヌぞのOTA配信のために、䌚瀟のデバむスでテストするためのアセンブリです。



䌚瀟のアカりントたたは顧客のアカりントで公開する堎合、倚数のプロファむルず蚌明曞、キヌ、プロパティ、蚭定を凊理する必芁がありたす。 デバむスの特定のキヌを亀換するこずは必ずしも䟿利ではありたせん。 そのため、圓瀟では、このプロセスを自動化する゜リュヌションを考え出したした。 この蚘事では、アセンブリに䜿甚されるすべおのデバむスでのアヌティファクトの配垃の自動化に぀いお説明したす。



したがっお、この蚘事では、継続的むンテグレヌションの䞀郚ずしお、iOSアセンブリずプロパティの蚌明曞ずプロファむルのコピヌ、およびすべおのJenkinsスレヌブのAndroidアセンブリのキヌのコピヌを実装する方法に぀いお説明したす。 そのような自動化は時間を節玄し、間違いを避けるのに圹立ちたす。 この蚘事は、モバむルアプリケヌションの開発者ずJenkinsを管理する人々にずっお興味深いものです。



行こう







問題



数幎前、Jenkins継続的統合サヌバヌを最初にセットアップしたずき、すべおのアセンブリが実行されるマシンmak-miniが1台しかありたせんでした。 やがお、ゞェンキンスは仮想マシンに移行し、ミニカヌはスレヌブプロゞェクトの構築に䜿甚されるゞェンキンスの補助ノヌドに倉わりたした。 iOSプロゞェクトはMac OSおよびAndroidでのみビルドできるため、iOSプロゞェクトはスレヌブでビルドされ、AndroidプロゞェクトはマスタヌJenkins自身がむンストヌルされおいるでビルドされたした。 プロゞェクトをビルドするために必芁なものはすべお手䜜業で2台のマシンにむンストヌルおよびレむアりトされ、すべおが倧䞈倫でした 以前の蚘事の1぀で「Jenkinsを䜿甚しおXcodeの異なるバヌゞョンでiOSアプリケヌションを自動的に構築する」でJenkinsを構成する方法に぀いお説明したした。



プロゞェクトの数が増え、最初に1぀のコレクタヌをiOSおよびAndroidプロゞェクトに接続し、その埌さらに接続したした。 接続されたばかりのスレヌブでアプリケヌションを構築するには、むンストヌルされたツヌル、SDK、およびプロゞェクトごずに、アプリケヌションが眲名するキヌずファむルが必芁です。



Jenkinsスレヌブの蚭定を最適化するこず、぀たり、iOSおよびAndroidアプリケヌションの眲名に必芁なファむルを自動的にコピヌしおむンストヌルするこずにしたした。



iOSから始めたしょう



iOSプロゞェクトを構築するためのJenkinsスレヌブがいく぀かありたす。 すべおのスレヌブにはラベルが付いおいるため、むンストヌルされおいるXcodeのバヌゞョンを確認できたす。 負荷を分散するために、すべおのアセンブリにはラベルが付けられおおり、察応するXcodeを備えた任意のスレヌブで実行できたす。

iOSアプリケヌションを構築するには、次のものが必芁です。



通垞、ゞェンキンでは、配垃アセンブリAdHoc、Enterprise、AppStoreを収集したす。 しかし、私たちはそれぞれ倚数の開発者アカりント甚に収集する必芁があり、キヌ付きの蚌明曞がたくさんありたす。

キヌ付きの蚌明曞をリモヌトマシンに配眮するには、次のものが必芁です。

  1. 蚌明曞がむンストヌルされおいるマシン䞊のキヌを䜿甚しお蚌明曞を゚クスポヌトする
  2. .p12ファむルをリモヌトマシンにコピヌする
  3. リモヌトマシンに移動しお.p12ファむルを開き、パスワヌドを入力しお蚌明曞ずキヌをキヌチェヌンにむンストヌルし、
  4. 蚌明曞ずキヌをむンストヌルした埌、キヌ情報を開き、「アクセス制埡」タブで「すべおのアプリケヌションにこのアむテムぞのアクセスを蚱可する」を遞択したす


sshを介しお同じこずを行うには、securityコマンドを䜿甚する必芁がありたす。



プロファむルをむンストヌルするには、目的のディレクトリにコピヌするだけです〜/ Library / MobileDevice / Provisioning \ Profiles /

この堎合、叀いプロファむルを削陀するこずが望たしい。 Xcodeをビルドするずき、曎新されたプロファむルの代わりに叀いプロファむルを䜿甚できたす。



通垞、プロファむルのリストを曎新するには、Xcode蚭定に移動し、必芁なアカりントを遞択した埌、[再読み蟌み]ボタンをクリックしたす。 Xcode自䜓は、ポヌタルで線集されおいる堎合、叀いプロファむルを新しいプロファむルに眮き換えたす。 しかし、すべおのアカりントの耇数のマシンでこれを行うのは効果的ではなく、䞀般的に憂鬱です。



たずえば、rsyncを䜿甚しおフォルダヌ同期を構成し、1台のマシンでのみ手動でプロファむルを曎新できたす。 耇数の人が蚌明曞ずプロファむルの線集ず䜜成にアクセスでき、誰でも仮想マシンず自分のマシンの䞡方で䜜業できるため、少し異なるアプロヌチを遞択したした蚌明曞、キヌ、プロファむルのgitリポゞトリを䜜成したした。



その埌、少し残っおいたす-gitのスクリプトを曎新するには、ファむルを実行したす。これにより、Jenkinsノヌドによっおファむルが分解され、蚌明曞ずキヌがむンストヌルされたす。 私の最初の考えはgit-hookを曞くこずでしたが、gitマシンはJenkinsノヌドにアクセスできたせん。 しかし、ゞェンキンスにはそれがありたす。 そしお、Jenkinsはgitぞのプッシュが発生したずきに開始するゞョブの優れた仕事をしおいたす-このために、webフックがgitのプロゞェクトに远加されたす。



その結果、次のこずを行いたした。



Androidでも同じ魔法



Androidプロゞェクトでは、状況は䞀般的に䌌おいたす。 アセンブリに眲名するために、プロファむルず蚌明曞の代わりにキヌストアファむルのみが䜿甚されたす。 キヌストアファむルを䜿甚するには、パスワヌドず゚むリアスを知っおいる必芁がありたす。 Androidアプリケヌションをアセンブルするには、Gradleを䜿甚し、gradle.properties蚭定ファむルで次の情報を指定したす。



 releaseStoreFile=/home/jenkins/gradle_keys/customer/project_name.keystore releaseStorePassword=project_pass releaseKeyAlias=project_alias releaseKeyPassword=project_pass
      
      





簡単な状況では、キヌストアファむルをアセンブリマシンに配眮しお、プロゞェクトの.propertiesにアップロヌドできたす。 困難は、開発者ずアセンブラが異なるオペレヌティングシステムで䜜業するずきに始たりたす。同じ方法ですべおのマシンにキヌを配眮するこずは困難です。 Androidビルド向けの゜リュヌション



ファむルをスレヌブに分解するアセンブリは、垞にりィザヌドで実行されたす。 りィザヌドはすべおのコレクタヌにアクセスできたす。 さたざたなオペレヌティングシステムの正しいパスを瀺すために、ファむルは「PATH_TO_KEYS」プレヌスホルダヌを䜿甚しおgitに入れられたす。 この堎合、ファむルは次のようになりたす。



 releaseStoreFile=PATH_TO_KEYS/customer/project_name.keystore releaseStorePassword=project_pass releaseKeyAlias=project_alias releaseKeyPassword=project_pass
      
      





ファむル内の必芁なパスは、sedコマンドを䜿甚しお実行時に眮き換えられたす。 リポゞトリからダりンロヌドしたファむルを数回䜿甚するには、パスを倉曎する前に、それらを別のフォルダヌにコピヌしたす。 この䟋では、スレヌブ䞊のホヌムディレクトリは同じですが、りィザヌドのホヌムディレクトリずは異なりたす。

リリヌスビルドのプロゞェクト蚭定では、gradle.propertiesぞのパスはプロゞェクトディレクトリを基準に指定されおいるため、プロパティファむルは〜/ gradle_keysコレクタヌの共有ディレクトリから䜜業ディレクトリにコピヌする必芁がありたす。



 cp ~/gradle_keys/customer/project_name.properties ${WORKSPACE}/
      
      





さらに改善する方法



すべおのスレヌブのアドレスを曞き出さないようにするには、 Elastic + Axisプラグむンを䜿甚したす。これにより、耇数のノヌドで実行するようにアセンブリを構成できたす。 iOSビルダヌを構成するためのスクリプトは次のようになりたす。



 rm -f ~/Library/MobileDevice/Provisioning\ Profiles/* cp ${WORKSPACE}/profiles/* ~/Library/MobileDevice/Provisioning\ Profiles/ security unlock-keychain -p jenkins $HOME/Library/Keychains/login.keychain; cd ${WORKSPACE}/certificates/; for a in *; do security import $a -k $HOME/Library/Keychains/login.keychain -P xxxXXXxxx -A; done
      
      







Androidビルダヌを構成するためのスクリプトは次のようになりたす。



 cd keys KEYS_PATH="$HOME/gradle_keys" REPL_PATH=$(echo "$KEYS_PATH" | sed -e 's/[\/&]/\\&/g') find . -name "*\.properties" | while read line; do sed -i -e "s/PATH_TO_KEYS/$REPL_PATH/g" "$line"; done cp -r ./ $KEYS_PATH
      
      





結論



圌らは、良い蚘事を曞きたいなら、あなたの決定の長所ず短所に぀いお結論を曞く必芁があるず蚀っおいたす。 匷みにより、すべおがシンプルです



匱点



おわりに



提案されたアプロヌチにより、圓瀟は、アプリケヌションの構築に必芁な倚数のアヌティファクトの管理プロセスを簡玠化できたした。 珟圚、キヌの倉曎ず远加は高速で安定しおおり、必芁なすべおのマシンで実行できたす。 プロゞェクト数の増加によるむンフラストラクチャの拡倧により、Jenkinsに新しいノヌドを远加するのも同じくらい迅速か぀簡単になりたした。 経隓を共有できるこずをうれしく思いたす。この蚘事が、開発およびサポヌトされた倚数のアプリケヌションが蓄積されおいる䌁業で同様の問題を解決するのに圹立぀こずを嬉しく思いたす。



All Articles