0

Jenkins Job DSL プラグインを使用してすべてのジョブをコードで構成しており、多くの場合、変更をデプロイする前にローカルの Jenkins ステージング環境を使用してテストしています。DSL が有効で、すべてのジョブが正しく作成されていることを確認したいのですが、何百ものジョブ全体がローカルでビルドを開始することは望んでいません。

たとえば、scma のパラメーターをオーバーライドしtriggerて、すべてのグルーヴィー ファイルでローカルに何もしないようにする方法はありますか? これを行うカスタム ライブラリ ファイルを作成できると思いますが、カスタムscm定義をインポートするには、すべての Groovy ファイルにインポート行を追加する必要があり、理想的ではありません。

明確にするために、特定の定義をエレガントに、またはモンキーパッチコードによってオーバーライドする方法を探しています。これにより、多くのグルーヴィーなファイルとジョブ定義をすべて変更する必要がなくなります。

4

3 に答える 3

0

DSL が有効であることを確認したい場合は、いくつかの単体テストを作成してください。ここまたはここでいくつかの例を見ることができます。特に、このテストは、すべてが問題なく生成できるかどうかを示します。とにかくローカルで生成してビルド自体が完了するかどうかをテストする場合は、SeedJob がすべての構成を生成した後にシステム groovy スクリプトを使用して、すべての自動トリガーを無効にすることができます。これを行う方法の例を次に示します。

于 2016-03-29T08:55:09.200 に答える
0

私にとってうまくいくのは:

  1. 現在のホスト名に基づいて、本番環境またはテスト環境で実行されているかどうかに応じて true/false を返す関数を追加します。たとえば、jenkins.mydomain.com として実行されている実稼働インスタンスがあり、jenkins-test.mydomain.com としてジェンキンをテストします。
  2. それに基づいて、ジョブの定義に if/then/else を追加します

たとえば、次のようにします。

これを JenkinsInstance.groovy に入れます:

import jenkins.model.*

// Representing the Jenkins server instance
class JenkinsInstance {
    // Determine if we're executing on a Jenkins production instance.
    static Boolean isProd() {
        if (Jenkins.getInstance().getRootUrl() ==~ ".*jenkins\\.mydomain\\..*") {
          return true
        } else {
          return false
        }
    }
}

ジョブ作成 DSL スクリプトは次のようになります

import JenkinsInstance

freeStyleJob("myjobname") {
  if (JenkinsInstance.isProd()) {
    scm {
       git {
       ...
       }
    }
  } else {
    scm {
    }
  }
}
于 2016-03-25T16:30:40.180 に答える