在容器中调试Groovy脚本

时间:2019-01-01 18:17:50

标签: docker jenkins groovy

我正在构建一个詹金斯容器,并希望在初始流程中设置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

我可以以根用户身份访问该容器。

问题是我无法调试脚本。我已经检查了使用jdb的某些方法,但是在所有情况下都需要运行它的邮件Java类。原始脚本在调用时无需更改就可以正常工作,因此它可以在没有任何类的情况下运行文件。

如何调试容器内的此类Java脚本?

谢谢。

1 个答案:

答案 0 :(得分:2)

一旦进入容器,请确保以调试模式运行代码。

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)在容器内执行,而探查器(在容器外运行)则附加到远程机器上。

相关问题