jenkinsプラグイン開発Tips

このエントリーをはてなブックマークに追加
お久しぶりです。QAチームのou.gです。
最近、jenkinsプラグインの作成を担当させて頂きましたので、今日はjenkinsプラグイン開発のTipsをご紹介させて頂きます。

jenkinsプラグイン開発の入門資料、手順とかはこのブログの説明対象外なので、下記をご参照ください。
https://wiki.jenkins-ci.org/display/JENKINS/Extend+Jenkins

■EclipseをIDEとして開発する場合、どうやってDebugしますか。

まず、eclipseのmavenプラグインm2eのインストルが必要です。
環境の構築からIDEにインポートするまでは、下記の手順をご参照ください。
https://wiki.jenkins-ci.org/display/JENKINS/Plugin+tutorial

Eclipseで対象となるプロジェクトを右クリックして、[Debug As]-[Maven build...]でDebugの構成を新規追加します。
下記画像のとおり、debug設定画面でパラメータを追加します。
MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=n

その後、新規追加したDebug構成でプラグインを起動すれば、debugが可能となっていることが確認できると思います。

■開発環境のjenkinsをバージョンアップしたい場合にどうすればいいのか。

mavenのpomファイル(プラグインフォルダの直下にあるpom.xmlファイル)を開いて、<parent>-<version>の値を変更すれば、バージョン管理ができると思います。


  org.jenkins-ci.plugins
  plugin
  1.464


■job propertyの設定項目は特定種類のプロジェクトにしか出したくない場合にどうすればいいですか。

FreeStyleProjectの設定画面だけに表示させたいjob propertyを例として説明させて頂きます。

JobPropertyのJobPropertyDescriptorにメッソドisApplicableのオーバーライドをします。

@Override
public boolean isApplicable(Class jobType) {
    return FreeStyleProject.class.isAssignableFrom(jobType);
}


そうしたら、FreeStyleProjectとFreeStyleProjectの子クラスにしかjob propertyの設定が表示しない。

同じで、node propertyの設定はダムスレーブにしか出したくない場合に、NodePropertyのNodePropertyDescriptorのisApplicableをオーバーライドすれば、実現できると思います。

@Override
public boolean isApplicable(Class targetType) {
    return DumbSlave.class.isAssignableFrom(targetType);
}


■システム設定画面に保存しようとしていた項目が保存できなかった場合にどうすればいいですか。

この問題があったら、多分対象Extension PointsのDescriptorにconfigureの実装がないと思います。

@Override
public boolean configure(StaplerRequest req, JSONObject formData) throws FormException {
    req.bindJSON(this, formData);
    save();
    return super.configure(req, formData);
}


同じで、configureの追加でDescriptorのメンバー変数が保存できましたが、jenkinsの再起動の後に、項目値また失ってしまうことがあったら、以下のようにDescriptorのconstructorを追加して、loadメッソドを呼び出してください。

public DescriptorImpl() {
    super(ShanonNodeProperty.class);
    super.load();
}


■doCheckXXXXでJobProperty設定の入力チェックを行う時に、対象Jobの情報も取りたい場合、簡単の対応方法がありますか。

以下のように、doCheckXXXXのパラメータにアノテーション@AncestorInPathで、AbstractProjectのインスタンスも注入すれば、実現可能だと思います。
public FormValidation doCheckJobPriority(@AncestorInPath AbstractProject project, @QueryParameter String value) throws IOException, ServletException {
......
}

■他の入力項目値によりプルダウンリストの選択肢を動的に変更したい場合、どうすればいいですか。

プルダウンリストの選択肢を作成するメッソドのパラメータに@QueryParameterで参照したい項目値を注入します。

public ListBoxModel doFillSubEnvItems(@QueryParameter String envName) {
...


■jellyの二重repeatableタグを使用したいですが、サンプルがありますか。
jellyのrepeatableタグを利用して簡単にリストデータの追加・削除・変更することができますが、二重repeatableの使用例は以下をご参照ください。

jellyのソース:

  
    
      
          
        
          
            

javaのソース

@Extension
public static class DescriptorImpl extends NodePropertyDescriptor {

    private List<ShanonEnv> envs;

    public List<ShanonEnv> getEnvs() {
        if (envs == null) {
            envs = new ArrayList<ShanonEnv>();
        }
        return envs;
    }

    public void setEnvs(List<ShanonEnv> envs) {
        this.envs = envs;
    }
...
}

public static class ShanonEnv {
    private String envName;
    private List<ShanonSubEnv> subEnvs;

    public String getEnvName() {
        return envName;
    }

    public List<ShanonSubEnv> getSubEnvs() {
        if (subEnvs == null) {
            subEnvs = new ArrayList<ShanonSubEnv>();
        }
        return subEnvs;
    }

    @DataBoundConstructor
    public ShanonEnv(String envName, List<ShanonSubEnv> subEnvs) {
        this.envName = envName;
        this.subEnvs = subEnvs;
    }
}

public static final class ShanonSubEnv {
    private String subEnvName;
    private String startJob;

    public String getSubEnvName() {
        return subEnvName;
    }

    public String getStartJob() {
        return startJob;
    }

    @DataBoundConstructor
    public ShanonSubEnv(String subEnvName, String startJob) {
        this.subEnvName = subEnvName;
        this.startJob = startJob;
    }
}

■jellyタグのレファレンスはどこにありますか。
ここです。
http://jenkins-ci.org/maven-site/hudson-core/jelly-taglib-ref.html

正直に言うと、jenkinsの開発資料がそんなに豊富ではないだと思いますが、幸いな事はjenkinsはopensourceなので、何かあったらjenkinsとプラグインのソースコードをどうどう読んでください。


追記
jenkinsのソースコードの取り方:Eclipseでプラグインのプロジェクトを右クリックして、[Maven]-[Download Sources]でソースコードをダウンロードしてみてください。

次の記事
« Prev Post
前の記事
Next Post »
Related Posts Plugin for WordPress, Blogger...