Отладка Groovy скрипта внутри контейнера - PullRequest
0 голосов
/ 01 января 2019

Я создаю контейнер jenkins и хочу установить KeycloakSecurityRealm в начальном потоке.У меня уже есть скрипт, который отлично работает для настроек по умолчанию:

    import hudson.*
    import hudson.model.*
    import jenkins.*
    import jenkins.model.*
    import java.util.logging.Logger
    import hudson.security.*
    import java.util.*
    import com.michelin.cio.hudson.plugins.rolestrategy.*
    import java.lang.reflect.*

    import org.jenkinsci.plugins

    /*
    NOTE:  that megascript should be split someday, when my groovy skills improves.
    */

    Thread.start {
        //vbles definition
        def logger = Logger.getLogger("")
        def instance = Jenkins.getInstance()
        def pm = instance.getPluginManager()
        def uc = instance.getUpdateCenter()
        def installed = false
    // More code...

    //No plugins to update. Security can be set
        logger.info("All plugins are up to date")
        logger.info("Setting security")

        //  logger.info("Creating initial user")
        //  hudsonRealm.createAccount("USER","USER")

        logger.info("Creating reaml")
        def keycloakSecurityRealm = keycloakRealm.createSecurityComponents()

        //realm based on jenkins database
        logger.info("Setting Security realm to KEYCLOAK")
        instance.setSecurityRealm(keycloakSecurityRealm)

        //not anonymous read allowed

Этот код вылетает без какой-либо информации.Я хотел бы отладить контейнер, чтобы проверить, могу ли я выполнить шаг, на котором происходит сбой контейнера, для подключения интерактивной консоли:

enter image description here

Можно выполнить

docker run -ti 3ed

И у меня есть доступ к контейнеру от имени root.

Проблема в том, что я не могу отладить скрипт.Я проверил, что есть несколько способов использования jdb , но во всех случаях для его запуска необходим почтовый класс java.Исходный скрипт работал при вызове без изменений, поэтому он запускает файл без каких-либо классов.

Как я могу отлаживать этот вид java-скриптов внутри контейнера?

Спасибо.

1 Ответ

0 голосов
/ 01 января 2019

Попав внутрь контейнера, обязательно запустите ваш код в режиме отладки.

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=32887 ...

Если у вас нет возможности запустить java самостоятельно, вы всегда можете использовать _JAVA_OPTIONS

export _JAVA_OPTIONS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=32887

Подключите ваш отладчик (например, IntelliJ) к удаленной машине (ваш контейнер на основе Docker).Отладка кода из IDE, запущенной вне контейнера.

Это должно сработать.

Для примера (используется для профилирования) посмотрите здесь:

https://github.com/mkowsiak/ProfilerDocker

Это не одно и то же, но похоже на то, что код на основе Docker (Java) выполняется внутри контейнера, а профилировщик (работающий вне контейнера) подключается к удаленной машине.

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