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アーキテクチャの反復とアップグレード:従来型、クラウド、エッジコンピューティングのハイブリッドパス

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

推薦する

なぜ Zuipin Mall のウェブサイトは今回のアルゴリズム更新によって順位が下がったのでしょうか?

Baidu がアルゴリズムを更新するたびに、ウェブマスターの間で騒動が起こります。喜ぶ人もいれば、心...

自分でテストしました!ウェブサイトの最適化の詳細が明らかに

Baidu が何度も調整を行って以来、ウェブサイト SEO の道は行き詰まりに陥っているようです。最...

「古い3社」が語るインターネットの「新しい物語」:人材不足の電子商取引の道

最近のWeiboの投稿により、赤い牡丹柄の「国民的ベッドシーツ」が全国で人気となり、新たなノスタルジ...

IoT、エッジコンピューティング、分析ギャップの解消

エッジ コンピューティングでは、コンピューティング能力をデータ ソースの近くに配置できるため、分析機...

調査によると、企業の80%が5Gとエッジプランを強化すると予想

エッジと 5G は業界全体で主要な投資分野となっており、企業をデジタル変革の次のレベルに導く強力な手...

ドメイン年齢と外部リンクがBaiduの包含と重みに与える影響

すべては相互に関連しています。しかし、すべての要因が他のエンティティに絶対的な影響を与えるわけではあ...

外部プロモーションはウェブサイトに役立ちますか?

オフサイトプロモーションには、フレンドリーリンクの構築とリンク情報の公開が含まれます。この仕事は非常...

どのようなユーザーエクスペリエンスが検索エンジンのニーズを満たすのでしょうか? (1つ)

ユーザー エクスペリエンスという言葉は、数え切れないほど多くのウェブマスターの頭の中にありますが、数...

百度の最近の変化についてお話ししましょう

Baidu は今年初めから散発的にアップデートを行っていますが、それでも Baidu には多くの変化...

黄太極のオンラインマーケティングモデルは模倣できるのか?

【はじめに】「マーケティングはサービスです」と何昌氏は語り、「黄太極のマーケティングは完全に携帯電話...

ユーザーの閲覧履歴に基づくウェブページのランキングのアイデア

Google の PageRank については詳しく説明しません。これは、Web ページの重要性を測...

ウェブマスターは、Baidu がサイト検索エンジンとして衰退していることにどう対処すべきでしょうか?

Baiduで「デジタルマルチメーター」を検索してください。検索結果の最初のページを見てみましょう。 ...

外部リンクから考えるインターネットマーケティング戦略

ウェブサイトの運用は、ウェブサイトの最適化とマーケティングのプロセスと切り離せません。ご存知のとおり...

新しい百度アルゴリズムによる企業ウェブサイト最適化戦略の分析

企業のウェブサイトは機能面で大きな進歩を遂げておらず、依然としてインターネット上で企業の顔としての役...

ウェブサイトの最適化: あなたのウェブサイトはアクセスに適していますか?

一部の非専門的なインターネット企業が中国の中小企業を騙したようで、私は非常に気の毒に思います。私の意...