2017-05-11 25 views
4

Jenkinsでのビルド後にビルド電子メール通知でスケジュールされた次のビルド時間を追加する必要があります。Jenkinsでトリガ情報をプログラムで取得する方法

トリガーは、「Build periodically」または「Poll SCM」、または予定時刻のものを使用できます。

私はトリガ情報がconfig.xmlファイルにあることを知っています。

<triggers> 
    <hudson.triggers.SCMTrigger> 
     <spec>8 */2 * * 1-5</spec> 
     <ignorePostCommitHooks>false</ignorePostCommitHooks> 
    </hudson.triggers.SCMTrigger> 
    </triggers> 

と私はまた、config.xmlファイルからカスタムスクリプトをトリガタイプや仕様を取得し、次のビルド時間を計算する方法を知っています。

Jenkinsにこの情報を公開するAPIが用意されているのだろうかと思います。私は検索しましたが、何も見つかりませんでした。私はここに、あなたはおそらく、もはやこれで助けを必要としないが、私はちょうど同じ問題を解決しなければならなかった実現

答えて

1

は、あなたが出力にジェンキンスコンソールですべてのトリガ設定を使用することができますスクリプトです:

#!groovy 

Jenkins.instance.getAllItems().each { it -> 
    if (!(it instanceof jenkins.triggers.SCMTriggerItem)) { 
    return 
    } 

    def itTrigger = (jenkins.triggers.SCMTriggerItem)it 
    def triggers = itTrigger.getSCMTrigger() 

    println("Job ${it.name}:") 

    triggers.each { t-> 
    println("\t${t.getSpec()}") 
    println("\t${t.isIgnorePostCommitHooks()}") 
    } 
} 

これにより、SCM構成を使用するすべてのジョブが、その仕様(実行時に関するcron-like式)と、コミット後のフックが無視されるように設定されているかどうかが出力されます。

#!groovy 
import groovy.json.* 

def result = [:] 

Jenkins.instance.getAllItems().each { it -> 
    if (!(it instanceof jenkins.triggers.SCMTriggerItem)) { 
    return 
    } 

    def itTrigger = (jenkins.triggers.SCMTriggerItem)it 
    def triggers = itTrigger.getSCMTrigger() 

    triggers.each { t-> 
    def builder = new JsonBuilder() 
    result[it.name] = builder { 
     spec "${t.getSpec()}" 
     ignorePostCommitHooks "${t.isIgnorePostCommitHooks()}" 
    } 
    } 
} 

return new JsonBuilder(result).toPrettyString() 

をそして、あなたはHTTPクライアントからこれを取得するためにJenkins Script Console web APIを使用することができます。

あなたはこのようにJSONなどのデータを取得するには、このスクリプトを変更することができます。

例えば、カールでは、テキストファイルとしてスクリプトを保存してから実行することによってこれを行うことができますが:

curl --data-urlencode "script=$(<./script.groovy)" <YOUR SERVER>/scriptText 

ジェンキンスは、基本認証を使用している場合は、-u <USERNAME>:<PASSWORD>引数でそれを供給することができます。

最終的には、要求は次のようになります:

{ 
    "Build Project 1": { 
     "spec": "H/30 * * * *", 
     "ignorePostCommitHooks": "false" 
    }, 
    "Test Something": { 
     "spec": "@hourly", 
     "ignorePostCommitHooks": "false" 
    }, 
    "Deploy ABC": { 
     "spec": "H/20 * * * *", 
     "ignorePostCommitHooks": "false" 
    } 
} 

あなたはあなたの特定のユースケースに合わせてこれらの例を調整することができるはずです。これは遠隔ではなく職場からアクセスする必要はないようですが、リモーティング部分も含めて他の人にとって便利な部分も含めています。

+0

以前は似たような考えがありましたが、スレーブマシンからシステムのGroovyスクリプトを実行することができず、ビルド環境が厳しく管理されているため、私は諦めました。 – Heinz

+0

私の会社では、エンドユーザーとスクリプトコンソールAPIの間に余分なレイヤーを構築しました。このようなGroovyスクリプトを保存し、管理者が承認し、ユーザーがそのシステムを介してスクリプトを実行できるようにするWeb APIがあります(スクリプトの内容は抽象化されています)。 Jenkinsのパイプラインでは、ユーザーはHTTPリクエスト(たとえばhttps://wiki.jenkins.io/display/JENKINS/HTTP+Request+Plugin)を使用して中間APIを起動できます。このようなツールの保守には間接的なオーバーヘッドがありますが、実装には一度だけの努力がなされています。 – JohnSomeone

関連する問題