Jenkins CI-私が芋逃したこず

こんにちは、ナヌザヌ名。 少し前たでは、Jenkins \ Hudsonを䜿甚するこずを匷く掚奚する、継続的むンテグレヌションサヌバヌのセットアップを求められたした。 これらの問題に぀いお無知な人物ずしお、ネットワヌク䞊でCIシステムをセットアップする際のヒントずレビュヌを怜蚎するこずにしたした。 この蚘事に぀いおWolonterに感謝したす 。 これは、䞀般的な抂念を理解するのに圹立ち、最も有甚なプラグむンを幅広く提䟛したした。 しかし、結局のずころ、私が実装したかったものずはたったく異なり、むンタヌネットで芋぀けるこずができるこずが刀明したした。 小さなそしおそうではないいたずらに興味を持っおいる人ず、どうやっお圌らに来たのか-猫をお願いしたす。

画像



問題ステヌトメントの段階
そのため、最初のタスクは、Webサヌバヌを起動し、リポゞトリの倉曎を远跡し、jUnit、TestNG、およびSeleniumのテストを実行するようシステムに教えるこずでした。 時間が経぀に぀れお、このタスクはたくさんのささいなもので倧きくなりたした。これに぀いおは埌で説明したす。 難しいこずではないようですが、結局のずころ、最初の意芋は間違っおいたす。 明確な良心を持っお、提䟛された仮想マシンにcentos 6 x64をむンストヌルし、CIをいく぀かの動きでむンストヌルしたした。

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key sudo yum install jenkins
      
      





圓然、jdkをむンストヌルし、jenkinsがスタヌトアップに远加されおいるかどうかを確認する必芁がありたす。 このようなこずで、Jenkins CIの最初の起動に倱敗したした-Jenkinsのajpポヌトは、以前にむンストヌルされたWebサヌバヌパヌトタむムの非リレヌショナルデヌタベヌスの1぀ず競合しおいたした。 構成ファむルでajpを無効にするず、すべおが適切に配眮され、最終的に自分の目ですべおの䞍思議を芋るこずができたした。



間違い
セットアップ䞭に倚くの間違いを犯したので、時間を節玄したい人のために短いリストを提䟛したす。

  1. プロゞェクト階局かなり耇雑な階局䟝存関係がある堎合は、怠けすぎお葉を取り、䜕が䜕に䟝存しおいるかを考えないでください。理想的にはそうあるべきです。
  2. すべおのプロゞェクトを䞀床に蚭定しようずしないでください。 各プロゞェクトを機胜する䞭間状態にし、次のプロゞェクトに切り替えおください。 あなたはい぀もマラフェットを䜜る時間を持っおいたす。
  3. すべおの䟝存プロゞェクトの䞭間構成が終了するたで、プロゞェクトの構成をなめないでください。 実装するこずを決定した機胜は、非垞に時間がかかるか、この段階ではたったくタスクではない可胜性がありたす。 プラグむンを䜜成するこずは、垞に正圓なアクティビティずは限りたせん。
  4. プロゞェクトの名前。 状況によっおは、プロゞェクトの名前を倉曎するず費甚がかかる堎合がありたす。 たた、名前に構造が含たれおいない130のプロゞェクトの名前を倉曎する必芁があるこずが突然明らかになった堎合はどうでしょうか。 そのため、ひざの䞊で脚本を曞いお、手で名前を倉曎するこずはできたせん。ヒキガ゚ルが぀ぶれたす。 簡単なヒントから名前たで長すぎおはならず、有甚な情報を䌝えるべきです。 たずえば、同じ補品の耇数のバヌゞョンが異なるポヌトで実行されおいる堎合、9587がポヌト番号である「ProjectAbbr9587」の粟神でそれらに名前を付けおください。 このネヌミングポリシヌにより、発蚀内容をすぐに理解し、混乱する可胜性を枛らすこずができたす。
  5. Jenkins CIを実行する予定のOSを遞択できる堎合は、自信のある䞊玚ナヌザヌの堎合はUnixを遞択しおください。 Jenkinsやその他のアプリケヌションを実行しおいるナヌザヌのアクセス暩に関する問題のほずんどがありたす。 これが難しくない堎合は、1人のナヌザヌに代わっおすべおを実行しおみおください。
  6. ゞェンキンス、ハむデガヌが゚ンティティを生産するのを奜む以䞊に芚えおおいおください。 したがっお、事前に、ナヌザヌjenkinsに代わっお、起動されるスレッドずプロセスの最倧数を増やしたす。 特に、負荷の高いCIサヌバヌがある堎合
  7. 衚瀺されるすべおのプラグむンをむンストヌルしないでください。 倚くの堎合、「1回限りの䜿甚」にはプラグむンが必芁であり、そのようなプラグむンは基本スクリプトに眮き換えるこずができたす。 圹に立぀こずは䜕もしたせんが、䜙分なリ゜ヌスを䜿い果たしたすこれはChuckNorris Pluginには圓おはたりたせん。
  8. 事前にリ゜ヌスの匷床を芋積もりたす。 栌玍するのが理にかなっおいるアセンブリの数を考えおください。 実際に必芁なアヌティファクトの数。 サヌバヌのパフォヌマンスが䜎い堎合は、倚くのリ゜ヌスを消費するアセンブリが同時に起動しないようにアセンブリスケゞュヌルを怜蚎し、䜿甚されるリ゜ヌスの数を監芖したくない堎合は、開始されたアセンブリの最倧数が少なくずも、たたはそれ以䞊であるこずを確認しおくださいプロゞェクト。
  9. jUnit、TestNGなどの情報提䟛 特にグルヌプ化されおいない5,000を超えるナニットテストを実行する堎合、ゞェンキンスのような矎しい結論であっおも、必ずしも有益ではありたせん。 たぶん、異なるレポヌトでテストを再配眮しお配垃するのが理にかなっおいたすか
  10. 安党性 圌女のこずを忘れないでください。 パスワヌドアクセスぞの切り替えは、劚害行為に熱䞭する個人の熱意を和らげるだけでなく、「あなたが私たちのためにすべおを壊した」ずいう頭の「到着」の堎合にも、「私ではなかった」ずいう議論に反論する蚌拠が文曞化されたす。
  11. Jenkins CIは開発者にずっお補助的なツヌルであるこずを忘れないでください。䜕かできない堎合は、サむクルを繰り返しおはいけたせん。 おそらく、1週間以内に玠晎らしい決定が頭に浮かぶかもしれたせんし、同じ週にこの機胜がそれほど必芁でないずいう認識が来るかもしれたせん。 時にはこの知恵をプロゞェクトマネヌゞャヌに説明する必芁がありたす。プロゞェクトマネヌゞャヌは、すべおが矎しいずいう願望が垞に正圓化されるずは限りたせん。


誰もがこのリストに远加するものがあるず思いたす。 しかし、すべおの最も重芁なこずのように思われたす。 そしお、この短いリストが倚くの人の時間を節玄するこずを本圓に願っおいたす。



最初の詊み
圓然のこずながら、最初の打ち䞊げ埌、青い円を芋るのは私にずっおは珍しいこずでしたが、その色はすぐには倉わりたせんでした。 SVNずGitをセットアップし、プロゞェクト階局を配垃したしたが、すべおが機胜しおいるように芋えたした。 翌日、1぀のタスクで4぀の予定されたアセンブリがあり、開始されたアセンブリは玄9時間続きたした。 「悪い」コミットが行われたのはこの日になっおいたため、ナニットテストは無限の埅機状態になりたした。 Build-timeoutプラグむンが助けになりたした。 䞀方、「無限のアセンブリ」にすべきプロゞェクトがありたした。 Webサヌバヌを実行し、アクションログをアセンブリに出力するAntタスク。これは非垞に䟿利でした。 圓然、これらのサヌバヌは数日間実行状態になる可胜性があり、それらを停止する䞍必芁な必芁なしでは意味がありたせん。 仕事をしたり、顧客に結果を芋せたりできたす。 1日の特定の時間にブランチの曎新があるかどうかをチェックし、存圚する堎合は曎新をダりンロヌドしおアセンブリを再起動するプロゞェクトを䜜成するこずにしたした。 䜕よりもたず質問を投げかけたマネヌゞャヌの反応は、「なぜプロゞェクトアセンブリのストリップが赀いのですか 「おそらく、午前10時で、アセンブリは過去6時間ログに䜕も曞き蟌たなかったためです。」 ストリップを再描画する解決策はただ芋぀かりたせんでした11項を参照が、これは難しくないず思いたす。 非完了アセンブリには他の問題もありたした。別のサヌバヌで2぀のプロゞェクトを䜜成せずに単䜓テストを実行する方法ですか 実際、これを実装するには、2぀のantタスク 'a' start-server 'ず' junit 'を実行する必芁がありたす。最初のタスクは終了したせん。 別のサヌバヌで尋ねる理由テストでメむンのWebサヌバヌをテストするのは良くないからです。 さらに、テスト甚のWebサヌバヌは、䜙分なリ゜ヌスを無駄にしないために、必芁に応じお、単䜓テストの期間のみ起動する必芁がありたす。 アリのすべおの可胜性を思い出しお、次のようなこずをするこずにしたした

 <target name="start-server-with-units"> <parallel> <daemons> <antcall target="start-server"> </antcall> </daemons> <sequential> <waitfor maxwait="10" maxwaitunit="minute"> <socket server="localhost" port="${port}" /> </waitfor> <antcall target="junit"> </antcall> </sequential> </parallel> </target>
      
      





正匏には、サヌバヌが起動するたで埅機し、単䜓テストを実行し、テストが完了したらサヌバヌの電源を切りたす。 実際に必芁なもの。 Jenkinsのツヌルでは、このようなプロゞェクトを行うこずは䞍可胜だず思いたす。



枝
私の意芋では、かき鳎らしのサポヌトはゞェンキンスでは䞍十分です。 「Svn//svn.adressport / $ {branchName}」branchNameは環境倉数は、倚くの堎合、問題を解決したせん。 たず、このようなアセンブリは手動たたはデフォルトのオプションでのみ開始できたすが、Pall SCMを䜿甚したアセンブリの開始はすでに明らかに䞍可胜です。 誰かがこの皮の機胜を必芁ずする堎合私はただそれを必芁ずしおいないこずが刀明したため、明確な良心をもっお、圌は起動時にbranchNameのデフォルト倀を起動時に蚭定された倀に倉曎しおからプロゞェクトを開始するgroovyスクリプトを䜜成できたす通垞のスケゞュヌル、および必芁に応じお、バヌゞョン管理システムで曎新のチェックを远加したす。 このアプロヌチの欠点は、䞀連の䞍芁なアセンブリでは、有甚なものを芋぀けるこずが難しいこずです。 しかし、これも重芁ではありたせん。同じpostBuild groovyスクリプトで、「アむドル」アセンブリを削陀する「ペダル」を固定できたす。 曎新を確認する別のプロゞェクトを䜜成できる堎合、このグルヌノィヌなスクリプトの奇跡を思い付く䟡倀はありたすか

結論時々、別の自転車を曞くよりも1぀のプロゞェクトを䜜成する䟡倀がある堎合がありたす。

たた、かき鳎らしの問題に、 Build Name Setter Pluginを含めたす。 ビルド番号の代わりにブランド名が衚瀺されおいるのはずおもいいこずですが、ここでもそれほど簡単ではありたせん。 なぜなら すべおの倉数に、文字列の最倧長をトリミングするために䜿甚できる長さ属性環境倉数などがあるわけではありたせん。 同意しお、この倖芳はあたり動機付けられおいたせんが、長さが30ではなく255文字の堎合はどうでしょうか

画像

この問題は、preBuild groovyスクリプトで再び解決できたす。 しかし、私の状況では、ブランド名を有益なものにするこずを䟝頌する方が簡単で、それほど長くはありたせんでした。 自転車ではなく垞識で䜕らかの䞍䟿を解決するのは非垞に䟿利です。



自転車
私たちは皆人であり、私たちは皆、䜕らかの快適さを求めおいたす。 プラグむンを曞きたくありたせんでした。劥協する人はいたせんでしたが、結果を達成したかったのです。 この理由から、私はここで䜕らかの圢で私にずっお生掻を楜にしおくれたすべおの自転車に぀いお説明したす。

 if(manager.build.result == hudson.model.Result.ABORTED){ manager.build.@result = hudson.model.Result.SUCCESS }
      
      





なぜなら クロスをクリックするだけで完了するプロゞェクト「アセンブリをキャンセルする」があり、灰色のボヌルに非垞に萜ち蟌んでいたので、アセンブリを成功させたかった統蚈が損なわれないように、すべおが正しいこずを知っおいる 。 プラグむンを実装したプラグむンは芋぀かりたせんでしたが、 Groovy Postbuildプラグむンを芋぀けたした。 そのため、groovyのpostbuild APIそれを呌び出したしょうはbuildSuccessメ゜ッドを提䟛しお、成功したビルド状態などを他の状態に蚭定したす。 問題は、このメ゜ッドが䜕もしないこずです。 家族党員がアセンブリの珟圚の状態を悪化させるこずができるだけです。 AbortedはSuccessよりもはるかに悪く、アセンブリの状態は倉化したせんでした。 か぀おJenkins'eで、アセンブリのステヌタスを倉曎するための本栌的な機胜を実装する芁求に3぀の問題が芋぀かりたした。 䞊蚘のコヌドは非垞に単玔なので、頭に収たりたせん。 「groovyには反射の類䌌物があるのではないか」ずいう質問を自問自答したした。 フリルの倒錯の愛奜家が感謝するこずを願っおいたす。



ビルドプロモヌション 。 はい、 Promoted Builds Pluginの存圚に぀いおは知っおいたすが、私の堎合は再び圹に立ちたせんでした。 手䜜業でのみ曎新され、手動ブランドを遞択したサヌバヌが1぀あり、2時間ごずに実行され、ギタヌブランチの最初のブランチを認識し、ダりンロヌドしお単䜓テストを実行したプロゞェクトがありたした。 プロゞェクト内のアセンブリの数は異なっおいたした。 合意により、最新の単䜓テストが成功した堎合にスタヌを䞎えるこずが決定されたした。 さらに、スタヌは最初のサヌバヌの完了時にのみ割り圓おられたす。 同意したす。プロモヌトされたプラグむンのかなり珍しい実装は、個人的なニヌズのためだけに匷化されたした。

 item = hudson.model.Hudson.instance.getItem("jUnitJobName") def build = item.getLastBuild() if(build.getResult() == null){ build = build.getPreviousCompletedBuild() } def result = build.getResult() if(result == hudson.model.Result.SUCCESS){ manager.addBadge("star-gold.gif", "Success Unit Tests") } else { manager.addBadge("warning.gif", "Unit Tests Failure") }
      
      





手動テストずの戊い

たたたたテスタヌが異なっおいたした。 そしお、䜕かがうたく機胜しない理由を圌らが知っおいる可胜性が非垞に高いのは非垞に残念ですが、圌らは事前に責任を先送りにしようずしお、「私はすべおをうたくやったが、それは壊れた、あなたは修理しおいる」ず䞻匵する そのような堎合、 AnsiColor Pluginは非垞に圹立ちたす。 これが機胜しない堎合は、より攻撃的な手段を䜿甚するこずを匷くお勧めしたす Build User Vars Plugin-個人的な扱いにより、アクションがより恥ずかしくなりたすマシンはどのように私の名前を認識したしたか 䞻なこずは無理をしないこずです。スクリプトが正垞に機胜しない状況が発生する可胜性がありたす。テスタヌはコン゜ヌルに次のように曞いたため、3日間の質問を恐れたした。 この堎合、すべおの石はあなたに飛びたす。 誰も愚か者のように芋えるのが奜きではありたせん。 しかし、あなたがそれを台無しにした堎合-このようなものを手に入れおください 

画像



したい
たあ、結論ずしお、私は物事を曞きたす-私はそれが本圓に奜きですが、私はプラグむンを曞きたせん。 実装されおいるかもしれたせんが、芋぀かりたせんでした。 ヒントに぀いお-感謝したす。

起動時にビルドを自動開始したす 。 たずえば、電力サヌゞ/光䞍足により、サヌバヌが再起動されたした。 JenkinsCIはそれを開始したしたが、垞に実行する必芁があるプロゞェクトは開始したせんでしたか ペンを実行するたびに-それはばかげおいたす。 したがっお、チェックマヌクが本圓に必芁です。「再起動埌にこのプロゞェクトを開始する必芁がありたすか」

SVN \ Gitカスタムブランチ+パッチは、䞊蚘のむメヌゞで曎新された堎合、既存のロヌカル倉曎をすべお䞊曞きしたす。 これにより、パッチが非垞に䞍䟿になりたす。 パッチをキャンセルし、目的のブランチをデフレヌトし、パッチを適甚し盎すスクリプトは本圓に奜きではありたせん。

システムメッセヌゞ 「jenkins \ configuration \ System Message」のパフォヌマンスの結果が、ビュヌだけでなくすべおのペヌゞに衚瀺されたこず。 䞀般に、倖芳を倉曎するためのプラグむンを増やしたいず思いたす。 なぜなら たず第䞀に、それは管理者の䜜業を容易にし、運甚に関する質問が少ないほど、開発のための時間が残りたす。

プラグむンを再構築したす。 Rebuild Pluginに以前のビルドを停止する方法を孊んでもらいたい堎合は、リビルドボタンをクリックしお、圌は別のビルドのみを蚈画したした。

PS私が欲しいものは必需品ずはほど遠いこずを知っおいたすが、これらはおそらく完党な幞犏のために十分ではないものです。 この蚘事が誰かに圹立぀こずを願っおいたす。



All Articles