Доступ к учетным данным Jenkins из плагинов - PullRequest
0 голосов
/ 08 марта 2019

Я следую документации здесь https://github.com/jenkinsci/credentials-plugin/blob/master/docs/consumer.adoc

Конкретно этот пример:

public ListBoxModel doFillCredentialsIdItems(
        @AncestorInPath Item item,
        @QueryParameter String credentialsId,
        ... (1)
        ) {
  StandardListBoxModel result = new StandardListBoxModel();
  if (item == null) {
    if (!Jenkins.getActiveInstance().hasPermission(Jenkins.ADMINISTER)) {
      return result.includeCurrentValue(credentialsId); (2)
    }
  } else {
    if (!item.hasPermission(Item.EXTENDED_READ)
        && !item.hasPermission(CredentialsProvider.USE_ITEM)) {
      return result.includeCurrentValue(credentialsId); (2)
    }
  }
  return result
    .includeEmptySelection() (3)
    .includeMatchingAs(...) (4)
    .includeCurrentValue(credentialsId); (5)
}
  1. Включите любые дополнительные контекстные параметры, которые вам нужны для уточнениясписок учетных данных.Например, если учетные данные будут использоваться для подключения к удаленному серверу, вы можете включить элемент формы URL-адрес сервера в виде @QueryParameter, чтобы из этого URL можно было построить требования к домену.

  2. Мы защищаем от полного заполнения выпадающего списка для пользователей, которые не имеют возможности сделать выбор.Это также полезно для предотвращения отправки нежелательных запросов во внешнее хранилище учетных данных.

  3. Если для пользователя допустимо не выбирать учетные данные, включите пустой выбор.

  4. Нам необходимо включить соответствующие учетные данные.В некоторых случаях вы можете иметь несвязанные объединения учетных данных, и в этом случае вы можете вызывать этот метод несколько раз, выигрывает первое удостоверение, добавленное для любого заданного идентификатора.

  5. Если вы включите текущее значениетогда конфигурация формы останется неизменной в случае удаления учетных данных.Альтернатива - позволить форме «волшебным образом» выбрать новые учетные данные, но обычно это неправильные учетные данные.Рекомендуется просто добавить «несуществующие» учетные данные и сделать так, чтобы проверка формы сообщала об ошибке

Однако я застрял на шаге 4 в примере, что мне делатьВот?Я пытался посмотреть на другие плагины, чтобы увидеть, как они реализуют это, но я быстро теряюсь.Есть ли простая демонстрация, которая показывает, как это работает?

Вот мой код, который основан на «Привет, мир, пример» Дженкинса.

package io.jenkins.plugins.sample;

import com.cloudbees.plugins.credentials.common.*;
import hudson.Launcher;
import hudson.Extension;
import hudson.FilePath;
import hudson.model.*;
import hudson.util.FormValidation;
import hudson.tasks.Builder;
import hudson.tasks.BuildStepDescriptor;
import hudson.util.ListBoxModel;
import jenkins.model.Jenkins;
import org.apache.commons.httpclient.auth.CredentialsProvider;
import org.kohsuke.stapler.*;
import javax.servlet.ServletException;
import java.io.IOException;
import jenkins.tasks.SimpleBuildStep;
import org.jenkinsci.Symbol;

public class HelloWorldBuilder extends Builder implements SimpleBuildStep {

    private final String name;
    private final String credentials;
    private boolean useFrench;
    private final String tppurl;

    @DataBoundConstructor
    public HelloWorldBuilder(String name, String tppurl, String credentials) {
        this.name = name;
        this.tppurl = tppurl;
        this.credentials = credentials;
    }

    @DataBoundSetter
    public void setUseFrench(boolean useFrench) {
        this.useFrench = useFrench;
    }

    public String getName() {
        return name;
    }

    public String getTppurl() {
        return tppurl;
    }

    public String getCredentials() {
        return credentials;
    }

    public boolean isUseFrench() {
        return useFrench;
    }

    @Override
    public void perform(Run<?, ?> run, FilePath workspace, Launcher launcher, TaskListener listener) throws InterruptedException, IOException {
        if (useFrench) {
            listener.getLogger().println("Bonjour, " + name + "!");
        } else {
            listener.getLogger().println("Hello, " + name + tppurl + "! " );
        }
    }

    @Symbol("greet")
    @Extension
    public static final class DescriptorImpl extends BuildStepDescriptor<Builder> {

        public FormValidation doCheckName(@QueryParameter String value, @QueryParameter boolean useFrench)
                throws IOException, ServletException {
            if (value.length() == 0)
                return FormValidation.error(Messages.HelloWorldBuilder_DescriptorImpl_errors_missingName());
            if (value.length() < 4)
                return FormValidation.warning(Messages.HelloWorldBuilder_DescriptorImpl_warnings_tooShort());
            if (!useFrench && value.matches(".*[éáàç].*")) {
                return FormValidation.warning(Messages.HelloWorldBuilder_DescriptorImpl_warnings_reallyFrench());
            }
            return FormValidation.ok();
        }

        @Override
        public boolean isApplicable(Class<? extends AbstractProject> aClass) {
            return true;
        }

        @Override
        public String getDisplayName() {
            return Messages.HelloWorldBuilder_DescriptorImpl_DisplayName();
        }

    }

//This is the credentials bit

    public ListBoxModel doFillCredentialsIdItems(
            @AncestorInPath Item item,
            @QueryParameter String credentialsId,
        ) {
        StandardListBoxModel result = new StandardListBoxModel();
        if (item == null) {
            if (!Jenkins.getActiveInstance().hasPermission(Jenkins.ADMINISTER)) {
                return result.includeCurrentValue(credentialsId); 
            }
        } else {
            if (!item.hasPermission(Item.EXTENDED_READ)
                    && !item.hasPermission(CredentialsProvider.USE_ITEM)) {
                return result.includeCurrentValue(credentialsId); 
            }
        }
        return result
                .includeEmptySelection() 
                .includeMatchingAs(STUCK HERE!!!!!) 
                .includeCurrentValue(credentialsId); 
    }


// end credentials


}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...