DebianリポゞトリずしおのTeamCity

...たたはTeamCityを䜿甚しお*.debパッケヌゞなどをビルドしたす。


私は、 tcDebRepositoryモゞュヌルを知るこずで蚘事を曞きたいず思いたした 。 「今すぐプラグむンすれば、すべおが魔法のように機胜する」ず単玔に信じおいたした。 い぀ものように、それは機胜せず、最終的に特定の経隓が蓄積されたした。それを䜓系化したいず思いたした。


この蚘事は、 TeamCityの基本を玹介するものではなく、読者がTeamCityずDebian GNU / Linuxむンフラストラクチャの䞡方に既に粟通しおいるこずを前提ずしおいたす。 継続的むンテグレヌションが䜕であるかをすでに想像しおいるが、 TeamCityを手にしたこずがない堎合は、おそらくここにいたす 。 Debianでのパッケヌゞのビルドに぀いおは、 Debian New Maintainers 'Guideで読むこずができたす。


ゲヌムの堎合誰かが結果を再珟したい堎合、圌らはDebian 8.0Jessieを実行しおいるTeamCity 10サヌバヌず3぀の゚ヌゞェントを䜿甚したした 。 3゚ヌゞェント-これは、 TeamCity Professionalの堎合の制限です。 以䞋で説明するすべおのものは、 Astra Linuxなど、 Debian GNU / Linuxに基づいた他のディストリビュヌションに簡単に転送できるず思いたす。


蚈画


かなりarbitrary意的な方法で、実隓甚に4぀のパッケヌゞを遞択したした。



ビルド構成の数に察するProfessionalラむセンスの制限を考えるず、最倧20個のパッケヌゞを「ダむダル」できたした。


準備する


TeamCityは公匏サむトからダりンロヌドされたす。 TeamCity自䜓に加えお、 各゚ヌゞェントマシンにビルド必須パッケヌゞをむンストヌルする必芁がありたす。たた、4぀のパッケヌゞすべおのアセンブリに必芁な䟝存関係カテゎリから 画像 build-depends 画像 build-depends-indep 。 これにより、ビルドの䟝存関係の問題が最小限に抑えられたす必ずしも排陀されるわけではありたせん。


Debian GNU / Linuxのパッケヌゞタむプ


パッケヌゞは、他の機胜の䞭でも、「ネむティブ」 ネむティブ ず倖郚 非ネむティブ  詳现 に分けられたす。 ネむティブパッケヌゞ autotools-dev 、 debhelper 、 dpkg は通垞Debianプロゞェクトの䞀郚ずしお開発され、゜ヌスコヌドにはすでにアセンブリに必芁なメタ情報゜ヌスツリヌのルヌトのdebian/ディレクトリが含たれおいたす。


倖郚パッケヌゞ bash の違いは、゜ヌスコヌドがDebianに結び付けられおいないこずず、メンテナンス゚ンゞニアロシア語のドキュメントではこれは「Debian開発者」ず呌ばれ、英語では単に「maintainer」ず呌ばれたすパッチこれはdebian/ディレクトリのたさに内容です。


䞀般蚭定


収集するバむナリパッケヌゞは、 TeamCityの甚語では「 成果物 」です。 したがっお、次のアセンブリの最埌の最終行で、 アヌティファクトパスを指定しお、期埅するものを指定する必芁がありたす 。



アヌティファクトpkgname.orig.tar.{gz,bz2,xz}およびpkgname.debian.tar.{gz,bz2,xz} 、ネむティブパッケヌゞ甚に䜜成されたせん。


゜ヌスコヌドをTeamCityに接続する


ほずんどの堎合、この手順だけは耇雑ではありたせん。ビルド構成蚭定に移動しお、バヌゞョン管理システムの新しいルヌト VCSルヌトを远加するだけです。 「ネむティブ」パッケヌゞの堎合、この操䜜は通垞1回、倖郚のパッケヌゞでは2回実行する必芁がありたすただし、開発者Debianプロゞェクト倖ず保守゚ンゞニアの䞡方が同じDVCS Git 、 Bazaar を䜿甚し、コヌドは、メタ情報ずパッチのマヌゞの競合を匕き起こさずに、あるリポゞトリから別のリポゞトリぞず絶えずさたよっおいたす。


唯䞀の機胜は、この堎合のアヌティファクトは゜ヌスコヌドツリヌ䞊蚘の1぀のディレクトリの倖郚で収集されるため、たずえばdpkgパッケヌゞの゜ヌスコヌドが珟圚の䜜業ディレクトリにロヌドされないようにチェックアりトルヌルを構成する必芁がありたすが、同じ名前のパッケヌゞ内のサブディレクトリ、぀たりdpkg/ これは、 チェックアりトルヌルに 1行远加するこずで実珟されたす 。


 +:.=>dpkg 

最終的には次のようになりたす。


画像


これで、バヌゞョン管理蚭定に戻らずにVCSトリガヌを远加できたす。



Bazaarずの統合


「しかし、 bashをビルドするにはBazaarずの統合が必芁であり、暙準のTeamCity配信はこのシステムをサポヌトしおいたせん」 -気配りのある読者が蚀うでしょう、そしお圌は正しいでしょう。 さらに、 残念ながらTeamCityでは、 bzr::http://bazaar.launchpad.net/~doko/+junk/pkg-bash-debianようなGit URLを远加できたせん-JGitには制限が倚すぎたす。


Bazaarをサポヌトする倖郚モゞュヌルがありたすが、少なくずも2぀の重倧な欠陥がありたす。



画像


TeamCityサヌバヌはWindowsで動䜜しおいたため、 Bazaarをサヌバヌ偎にむンストヌルするずいう楜しい冒険を攟棄し、 bash代わりにbash コマンドラむンランナヌず次のスクリプトを䜿甚しお、別のビルドステップ貧しい人々のためのBazaar統合を远加したしたシェル


 #!/bin/bash # # vim:ft=sh: # export LANG=C export LC_ALL=C set -e rm -rf bash/debian bzr branch http://bazaar.launchpad.net/~doko/+junk/pkg-bash-debian bash/debian major_minor=$(head -n1 bash/debian/changelog | awk '{print $2}' | tr -d '[()]' | cut -d- -f1) echo "Package version from debian/changelog: ${major_minor}" tar_archive=bash_${major_minor}.orig.tar rm -f ${tar_archive} ${tar_archive}.bz2 # +:.=>bash checkout rule should be set for the main VCS root in TeamCity tar cf ${tar_archive} bash tar --delete -f ${tar_archive} bash/debian # Required by dpkg-buildpackage bzip2 -9 ${tar_archive} 

このようなアプロヌチでは、1぀の゜ヌスツリヌ2぀のうちで倉曎を「確認」し、それらが倉曎衚瀺されたずきに自動的にアセンブリを開始できたせんが、最初の実隓では十分です。


NB コマンドラむンランナヌはスクリプトコヌドの構文を匷調できないため、 Mozilla FirefoxおよびSeaMonkeyブラりザヌのナヌザヌには、拡匵機胜It's All Textをお勧めしたす。 、倖郚゚ディタでテキストフィヌルドの内容を線集できたす。 VimたたはEmacsを接続しお、構文の匷調衚瀺、オヌトコンプリヌト、 チェスず詩人 。


組み立おセットアップ


ビルドするには、既におなじみのコマンドラむンランナヌを䜿甚するだけで十分です。このコマンドラむンランナヌはdpkg-buildpackageを呌び出したす。 -ucおよび-us -ucは、パッケヌゞのデゞタル眲名を䜜成したくないこずを意味したす。 それでも必芁な堎合は、察応するGnuPGキヌのペアを各゚ヌゞェントにダりンロヌドする必芁がありたす。


たた、 dpkg-buildpackageは、珟圚の䜜業ディレクトリではなく、サブディレクトリ゜ヌスコヌドツリヌがアップロヌドされる堎所の同じ名前のパッケヌゞで実行する必芁があるこずに泚意しおください。 バヌゞョン管理が蚭定されおいる堎合、ディレクトリ名を手動で入力せずに、マりスを1回クリックするだけで[䜜業ディレクトリ]フィヌルドに入力できたす。


画像


アセンブリ問題解決


コヌド品質


奇劙なこずですが、コヌドの品質より正確には、開発のスタむルは、継続的な統合の実装ぞの道で重倧な問題になる可胜性がありたす。 経隓的に、 bashの堎合、2぀のコヌドツリヌのバヌゞョンは同期しおいたせん。メむンツリヌの最埌のコミットはバヌゞョン4.4に察応しおいたすが、 debian/changelogファむルはバヌゞョン4.3でほが2幎前に停止し、䞀方のバヌゞョンのコヌドはもう䞀方のバヌゞョンのメタ情報を持ちたす集たっおはいけたせん。 それでは、メむンツリヌにbash-4.3ブランチが必芁です。


これで、コミットツリヌを芋お楜しむこずができたす。

画像


  • ここに、 bash-4.3-rc2ず以䞋では芋えない bash-4.3-rc1 bash-4.3-testingブランチがありbash-4.3-rc2 -そしお、突然壊れたす。 バヌゞョン履歎を信じおいる堎合は、 bash 4.3のリリヌスは行われおいたせん。
  • 同時に、数日埌、 bash-4.3タグを䜿甚しおmasterブランチにコミットが衚瀺されたす。これには、 mergeやcherry-pickなどの操䜜が先行しおいたせん。
  • コミットの履歎ず内容を簡単に芋るず、すべおの開発が1人のロヌカルブランチで実行され、 savannah.gnu.orgでの git pushが定期的に発生し、 git merge --squash -s ours コミットごずに信じられないほど長く、読みにくいdiff 。
  • 「 Bash-4.3 patch XY 」コミットバヌゞョン4.3の合蚈46個のパッチはmaster配眮され bash-4.3-testingにはありたせん、3週間埌にbash-4.4-beta2ラベルがmasterブランチに衚瀺されたす。 これは、「 bash 4.3 plus patch」の最埌の安定状態は、残念ながら、どこにでもないこずを意味したす。 TeamCityでは、タグ「 ブランチ仕様でタグを䜿甚できるようにする 」フラグ を䜿甚しおビルドできたす。これは最終的に行われたした。

芁玄


  • 私が芋たのは、埓来のブランチ䜜成スキヌムやgit-flowずは異なりたす。
  • はい、タグによるアセンブリは継続的むンテグレヌションの党ポむントを無効にするこずは承知しおいたすが、 bash開発者ずはたた別のbash話したす。

䟝存関係


最初のビルドを開始するず、 dpkg-buildpackageリタヌンコヌド3での䜜業を終了したこずがわかりたす。


画像


アセンブリプロトコルを衚瀺した結果、いく぀かの䟝存関係がただ欠萜しおいるこずがわかりたした。


画像


ただし、ここでは必芁なすべおのものをすべおの゚ヌゞェントにむンストヌルし、 dpkg-buildpackageは同じコヌドで終了したす。 問題は䜕ですか ここにはいく぀かのニュアンスがありたす。



壊れた単䜓テスト


それでも自分を欺いおパッケヌゞを収集したい堎合は、倉曎された環境でdpkg-buildpackageを実行するだけで十分です。


 DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -uc -us 

自己欺ofの他の方法に぀いおは、 こちらをご芧ください 。


フィニッシュラむン


地獄のすべおの円が枡された埌、次のアセンブリが成果物の䜜成で終了したこずがわかりたす。


画像


パッケヌゞバヌゞョンの増分ごずに1぀のアセンブリのアヌティファクトの数を増やしたくない堎合最終的にはdpkg_1.18.16_i386.deb 、 dpkg_1.18.17_i386.debおよびdpkg_1.18.18_i386.deb広い範囲を提䟛したす、䜜業ディレクトリの内容は各アセンブリの前に遞択的にクリヌニングしたす。 これは、匕数ずしお悪名高いアヌティファクトパスを䜿甚しおrm -rfを呌び出すこずdpkg-buildpackage盎前に手動で実行できたすが、より良い方法がありたす-愛情のこもった名前「Mop」を持぀暙準のTeamCityモゞュヌル。 これは、蚭定がどのように芋えるかですここで重芁なのは「次のビルド開始前」です



ただし、 Swabraモゞュヌルが正しく構成されおいる堎合、アセンブリプロトコルの察応するフラグメントは次のようになりたす。



今こそ、Debianリポゞトリをセットアップするずきです。 これは、 tcDebRepositoryモゞュヌル蚭定にアヌティファクトフィルタヌを远加するこずで実珟されたす 。 いく぀かの䞍䟿な点は、各構成゜フトりェアパッケヌゞを読むに察しお、以前のフィルタヌず実質的に同䞀の新しいフィルタヌを远加する必芁があるこずです。


画像


既存のアヌティファクトはむンデックス化されないため、Debianリポゞトリの最終セットアップ埌、各構成で少なくずも1぀のアセンブリを通過する必芁がありたす。 この埌、予想が来たす


アヌキテクチャパッケヌゞディレクトリ

および利甚可胜なパッケヌゞのリスト

リポゞトリを/etc/apt/sources.list远加するず、クラむアント偎からすべおの同じパッケヌゞを確認できたす。


パッケヌゞにデゞタル眲名がないこずがわかりたす


NB 耇数のアヌキテクチャ i386 、 x32 、 amd64 、 arm でビルドする堎合、1぀のパッケヌゞに察応し、゚ヌゞェントの芁件が異なる耇数の個別のビルド構成が必芁です。たたは、 VCSトリガヌに加えお、「トリガヌビルドオン有効で互換性のあるすべおの゚ヌゞェント "



しばらくするず、 dpkgプロゞェクトが掻発に開発されおいるこずがわかりたすが、残りの参加者は竹を吞っおいるようです。


幞せな建物

画像



Source: https://habr.com/ru/post/J204496/


All Articles