1

実質的に同じ Jenkinsfile を使用するプロジェクトがいくつかあります。唯一の違いは、チェックアウトする必要がある git プロジェクトです。これにより、プロジェクトごとに 1 つの Jenkinsfile が必要になりますが、同じものを共有できます。

node{
    def mvnHome = tool 'M3'
    def artifactId
    def pomVersion

    stage('Commit Stage'){
        echo 'Downloading from Git...'
        git branch: 'develop', credentialsId: 'xxx', url: 'https://bitbucket.org/xxx/yyy.git'
        echo 'Building project and generating Docker image...'
        sh "${mvnHome}/bin/mvn clean install docker:build -DskipTests"
    ...

同じJenkinsfileを再利用できるように、ジョブの作成中にgitの場所を変数として事前設定する方法はありますか?

...
    stage('Commit Stage'){
        echo 'Downloading from Git...'
        git branch: 'develop', credentialsId: 'xxx', url: env.GIT_REPO_LOCATION
    ...

私はこのように設定できることを知っています:

このプロジェクトはパラメーター化されています -> 文字列パラメーター -> GIT_REPO_LOCATION、デフォルト = http://xxxxであり、env.GIT_REPO_LOCATION でアクセスします。

欠点は、ユーザーがデフォルト値でビルドを開始するか、それを変更するように求められることです。ユーザーに対して透過的である必要があります。それを行う方法はありますか?

4

2 に答える 2

1

Pipeline Shared Groovy Library プラグインを使用して、すべてのプロジェクトが git リポジトリで共有するライブラリを作成できます。ドキュメントでは、それについて詳しく読むことができます。

大部分が類似している多数のパイプラインがある場合、グローバル変数メカニズムは、類似性を捉えるより高いレベルの DSL を構築するための便利なツールを提供します。たとえば、すべての Jenkins プラグインは同じ方法でビルドおよびテストされるため、buildPlugin という名前のステップを作成できます。

// vars/buildPlugin.groovy
def call(body) {
    // evaluate the body block, and collect configuration into the object
    def config = [:]
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = config
    body()

    // now build, based on the configuration provided
    node {
        git url: "https://github.com/jenkinsci/${config.name}-plugin.git"
        sh "mvn install"
        mail to: "...", subject: "${config.name} plugin build", body: "..."
    }
}

スクリプトがグローバル共有ライブラリまたはフォルダレベルの共有ライブラリとしてロードされていると仮定すると、結果の Jenkinsfile は劇的に単純になります。

Jenkinsfile (スクリプト化されたパイプライン)

buildPlugin {
    name = 'git'
}

この例は、jenkinsfile が name = git をライブラリに渡す方法を示しています。私は現在、同様のセットアップを使用しており、非常に満足しています。

于 2017-04-07T14:13:01.433 に答える