DevOps でパイプライン スクリプトを成功させるための 4 つのコア要素

DevOps でパイプライン スクリプトを成功させるための 4 つのコア要素

[[429059]]

DevOps でアプリケーションを成功させるための複雑なパイプライン スクリプトを設計するには、次の側面を考慮する必要があります。

1. スクリプトの安定性: 例外処理メカニズムを使用して、例外が発生してもスクリプトが例外をキャプチャして実行を継続できるようにします。

2. スクリプト実行のタイムアウト処理: 待機時間が長くなることによって実行時間が無駄になるのを避けるために、構築時にタイムアウト メカニズムを考慮する必要があります。

3. ビルド結果の処理: 例外処理メカニズムにより、Jenkins ビルドの結果はすべて成功になります。ビルド結果またはステージ結果を制御および分析する場合は、ビルド結果をさらに処理する必要があります。

4. Groovyスクリプトの呼び出し: より複雑な機能を実装するために他のGroovyスクリプトを導入する

基本的なコード設計スタイル

スクリプトを書く通常の形式は

  1. ノード {
  2. ステージ( 'ビルド' ){
  3. // git ダウンロード コード
  4. // mvn クリーンインストール ビルドコード
  5. }
  6. ステージ( 'ユニットテスト' ) {
  7. // ユニットテストを実行する
  8. }
  9. ステージ( 'テスト' ) {
  10. // コア機能をカバーする自動テストスクリプトを実行する
  11. }
  12. ステージ( 'デプロイ' ){
  13. // 運用および保守スクリプトを実行し、プログラムをオンラインで展開します
  14. }
  15. }

スクリプトを安定させる

  1. ステージ( 'テスト' ){
  2. 試す {
  3. //処理するコード
  4. }キャッチ(エラー) {
  5. //エラー処理コード
  6. }
  7. catch(式) {
  8. //例外処理のコード
  9. }

スクリプト実行タイムアウト処理

シナリオによっては、Maven ビルド タイムアウト、テスト コード実行タイムアウトなどのスクリプト タイムアウトを処理する必要があり、その場合は次のようにコードを設計できます。

  1. 試す {
  2. タイムアウト(タイムアウト) {
  3. //タイムアウト処理コード
  4. }
  5. }
  6. キャッチ (式) {
  7. //タイムアウト例外をキャッチしてさらに処理する
  8. def error_msg = exp.getCauses()[0].toString()
  9. if (error_msg.find( "タイムアウトステップ実行" ) == "タイムアウトステップ実行" ) {
  10. //処理ロジック
  11. }
  12. }

ビルド結果の処理

try... catch... メソッドを使用すると、Jenkins ビルドの結果はすべて SUCCESS になります。ビルドまたはステージの結果を制御する場合は、次の方法に従います。

ビルド結果には、SUCCESS、UNSTABLE、FAILURE(ビルドが進行中の場合はnullを返す)が含まれます。

ビルドの最終結果を設定するには、変数currentBuild.resultを使用します。

currentBuild.result ='FAILURE' //ビルド結果を失敗に設定する

各ステージの結果を処理するには、catchErrorを使用する必要があります。

catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {} //ビルド結果を成功、ステージ結果を失敗に設定します

他のGroovyスクリプトをインポートする

GroovyクラスでAPIを呼び出す

  1. クラスデモ.groovy
  2. クラス MyClass {
  3. void test1() {
  4. println( "テスト1" )
  5. }
  6. 静的void test2() {
  7. println( "テスト2" )
  8. }
  9. }
  10. 新しいMyClass()を返す

呼び出し元に戻り値を返す必要があることに注意してください。つまり、return new MyClass()はインスタンスを返します。

Groovy スクリプトで関数を呼び出す

  1. デモ.groovy
  2. デフfun1(){
  3. println( "関数1" )
  4. }
  5. デフfun2(){
  6. 楽しい1()
  7. println( "func2" )
  8. }
  9. デフfun3(){
  10. 楽しい1()
  11. println( "func3" )関数
  12. }
  13. これを返す

また、呼び出し元に返り値を返す必要があることに注意してください。つまり、これを返す必要があります。

パイプラインで Groovy スクリプトを呼び出す

スクリプトを導入するには load を使用します。コードは次のとおりです

  1. ノード {
  2. def f= load ( "/opt/scripts/test/Demo.groovy" )
  3. f.fun1()
  4. def f2=ロード( "/opt/scripts/test/ClassDemo.groovy" )
  5. f2.テスト1()
  6. }

Jenkins共有ライブラリ方式

share メソッドを使用できます。公式ドキュメントを参照してください。

https://www.jenkins.io/doc/book/pipeline/shared-libraries/

<<:  今後3~5年間のITアーキテクチャの反復とアップグレード:従来型、クラウド、エッジコンピューティングのハイブリッドパス

>>:  製造業におけるクラウド コンピューティング: 不可能から不可欠へ

推薦する

ビットコイン決済をサポートする海外の独立系サーバー業者をいくつか紹介します

この記事では、海外のサーバーでビットコイン決済を受け付けている店舗をいくつか紹介します。何らかの理由...

SEO に関する 4 つのよくある誤解の分析 (パート 2)

前の章では、SEO に関するよくある誤解を 4 つ紹介しました。具体的なアドレスは、http://w...

百度の検索結果は今日からオリジナルコンテンツを優先する

Baidu が準備を進めてきたオリジナルの Spark プロジェクトがひっそりと開始されました。検索...

分類サイトは苦境に立たされている。アクセス数が急激に減少し、偽情報が蔓延している。

「58.com、魔法のウェブサイト!」ヤン・ミーをスポークスマンに迎えた58.comの広告は、バスや...

IoTがエッジコンピューティングへの入り口となる

ここ数年、IoT プラットフォームについては多くの議論が行われてきました。アナリストは、今後発展して...

クラウド AI とエッジ AI: 2022 年にはどちらがより良い選択でしょうか?

エッジ AI とクラウド AI は、現在企業が使用している最も重要なテクノロジーの一部であることがわ...

私がよく知っているSEOの収益モデルについてお話しします

王世凡は、一人で働いていた頃から、今では小さなチームで働くようになり、自分が熟知しているいくつかの ...

マルチクラウドワークロード向けのハイブリッドパブリッククラウドサービス

ワークロードで複数のベンダーのサービスを組み合わせて使用​​する場合、マルチクラウド接続を備えた直接...

漫画サイトを運営するには?

アニメ ウェブサイトの増加に伴い、ますます多くのウェブマスターがコミック ウェブサイトに注目するよう...

ユーザーの視点から、製品とユーザーの間に「テレパシー的なつながり」を持たせる

ちょっとしたお話から始めましょう。研究を行うべきかどうかについては、以前からオンラインで議論がありま...

第3四半期の最も安いVPSランキング

以下は、今年第 3 四半期の格安 VPS のトップ 20 リストです。複数の企業と複数のデータ セン...

百度の大型アップデートが6つの業界に与える影響を推測する

今回、Baiduの6.22と6.28のアップデートと調整(まだ停止していない)は、中小規模のウェブマ...

YYキャスターの生存は危機に瀕しており、彼らは金儲けのために自らを虐待するつもりだ

概要: オンライン ショーでは、すでに数回にわたってエッジ ボールがプレイされています。かつてはポル...

核分裂の根底にある論理、核分裂を永続的かつ効果的にするにはどうすればよいでしょうか?

月収10万元の起業の夢を実現するミニプログラム起業支援プラン著者: ジャッキー、アクティビティ ボッ...

Boya Nehalem 高性能ブレード Ziqiang PR7014B

Powerleader PR7014B は、モジュラー設計コンセプトに基づいて開発された新世代の高性...