Оберните этап withCredentials и укажите контекст - PullRequest
0 голосов
/ 16 июня 2020

У меня проблема с моей общей библиотекой. Я написал диспетчер контекста, чтобы предоставить мне объект шагов. Поэтому я написал класс-оболочку для объекта steps, чтобы упростить модульное тестирование моего кода. Мне удалось обернуть почти каждый необходимый шаг, за исключением шага withCredentials. Я не знаю, как понять контекст моего закрытия. Вот соответствующий код моей текущей реализации:

// StepExecutor.groovy
class StepExecutor implements IStepExecutor {
    private def _steps

    StepExecutor(steps) {
        _steps = steps
    }

    @Override
    void withCredentials(List bindings, Closure closure) {
        this._steps.withCredentials(bindings, closure)
    }

    @Override
    def usernamePassword(Map credentials) {
        return this._steps.usernamePassword(credentials)
    }
}
// SomeFile.groovy
steps.withCredentials([
        steps.usernamePassword(
                credentialsId: "Sharepoint365",
                passwordVariable: "pass",
                usernameVariable: "user"
        )
]) {
// Do something with pass and user
}

Соответствующий код withCredentials, где я передаю закрытие, которое выполняется и в котором я хотел бы иметь * 1007 Установлены переменные * и user. Как я могу сделать это sh? Я попытался решить эту проблему, глядя на код здесь https://github.com/jenkinsci/credentials-binding-plugin, но должен признать, что я понятия не имею, что они там делают.

Я знаю, что могу позвонить withCredentials прямо на объект, но я бы хотел обернуть его, но я считаю это решение своим последним вариантом.

Заранее спасибо.

1 Ответ

0 голосов
/ 17 июня 2020

Я выяснил, почему прямой доступ к pass и user невозможен. Переменные хранятся в самом объекте шагов (возможно, даже в env?), Поэтому мне пришлось получить доступ к этим переменным через объект шагов. Поэтому я написал функцию, которая вызывает steps.<name> следующим образом:

// StepExecutor.groovy
class StepExecutor implements IStepExecutor {
    ...

    @Override
    String get(String name) {
        return this._steps."${name}"
    }
}

И для доступа к ним я просто вызвал StepExecutor.get("pass/user") внутри своего закрытия.

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