jelly.config 中的可选块未转换为 jenkins 插件开发中的后端。

optional block in jelly.config not translating to the backend in jenkins plugin development.

我 jelly.config 具有以下内容:

        <f:block>
            <f:optionalBlock inline="true" name="dynamic" title="Mandatory parameter for rpm artifacts only" checked="false"
                help="/plugin/artifactory/help/common/help-artifactType.html">
                        <f:entry title="Operating System">
                                <select class="setting-input" name="operatingSystem">
                                        <option value="rhel5">rhel5</option>
                                        <option value="linux">linux</option>
                                </select>
                        </f:entry>
                        <f:entry title="Architecture">
                                <select class="setting-input" name="architecture">
                                        <option value="64">64</option>
                                        <option value="32">32</option>
                                </select>
                        </f:entry>
            </f:optionalBlock>
        </f:block>

在我的 serverDetails.js 我有 :

    public class ServerDetails {
    public final String operatingSystem;
        /**
         * This the type of operating system that your rpm builds on. If not specified, this passes null. 
         */
        public final String architecture;
        /**
         * This the type of architecture your rpm runs on. If not specified, this passes null. 
         */
    }

    public ServerDetails(String artifactoryName, String artifactoryUrl, String repositoryKey, String snapshotsRepositoryKey,
                             String downloadReleaseRepositoryKey, String downloadSnapshotRepositoryKey,
                             String downloadReleaseRepositoryDisplayName, String downloadSnapshotRepositoryDisplayName,
                             String userPluginKey, String userPluginParams,String artifactKey,String productKey, String operatingSystem, String architecture, String buildType) {
            this.operatingSystem = operatingSystem;
            this.architecture = architecture;
            this.buildType = buildType;
            createStagingPlugin();
        }

public ServerDetails(String artifactoryName, String artifactoryUrl, String repositoryKey, String snapshotsRepositoryKey,
                         String downloadReleaseRepositoryKey, String downloadSnapshotRepositoryKey,
                         String downloadReleaseRepositoryDisplayName, String downloadSnapshotRepositoryDisplayName) {
        this(artifactoryName, artifactoryUrl, repositoryKey, snapshotsRepositoryKey, downloadReleaseRepositoryKey,
                downloadSnapshotRepositoryKey, downloadReleaseRepositoryDisplayName, downloadSnapshotRepositoryDisplayName, null, null,null,null, null, null, null);
    }

在我的后端 java 我将其用作 :

public String getOperatingSystem() {
        return details != null ? details.operatingSystem : null;
    }

    public String getArchitecture() {
        return details != null ? details.architecture : null;
    }

现在,当我在前面选择操作系统和体系结构后访问它们时,当我打印出来时,我仍然得到它们的空值。

我是不是漏掉了什么?为什么我没有得到值。

在你创建的工作中,XML有什么?您可以从 URL localhost:8080/job//config.xml

我猜你需要像 here

这样的 doFillOperatingSystemItems 调用

未测试

public ListBoxModel doFillOperatingSystemItems(
    @QueryParameter String operatingSystem
) {
    return new ListBoxModel(
        new Option("rhel", "rhel", operatingSystem.matches("rhel") ),
        new Option("linux", "linux", operatingSystem.matches("linux") ) 
    );
}