为了最小化使用intelliJ将调试会话附加到远程Pod(部署在OpenShift上的微服务)的建立时间, 我正试图充分利用远程调试配置的“启动前”设置。
在使用以下命令行参数将调试器附加到JVM Socket之前,我使用了2个步骤(此设置有效,但需要编辑每个新的部署);
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000
步骤1: 外部工具:带有参数的oc:
login
https://url.of.openshift.environment
--username=<login>
--password=<password>
步骤2: 外部工具:带有参数的oc:
port-forward
microservice-name-65-6bhz8 -> this needs to be changed after every deploy
8000
3000
3001
背景信息: 这是spec> containers> env下他的YAML服务中的信息:
- name: JAVA_TOOL_OPTIONS
value: >-
-agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=3000
-Dcom.sun.management.jmxremote.rmi.port=3001
-Djava.rmi.server.hostname=127.0.0.1
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
随着Pod名称的每次更改(重新部署),我正在尝试找到一个oc命令,该命令可用于端口转发而无需提供Pod名称。(例如基于服务名称) 或者是一个完全其他的解决方案,允许我按1个按钮来设置调试会话(最好是intelliJ)。
> Screenshot IntelliJ settings
-----------------------------提示后编辑--------------- ----------------
现在,我制作了一个小批处理脚本,可以解决这个问题: 随时为更快的解决方案提供帮助 (我正在检查https://openshiftdo.org/) 或其他智能解决方案
set /p _username=Type your username:
set /p _password=Type your password:
oc login replace-with-openshift-console-url --username=%_username% --password=%_password%
oc project replace-with-project-name
oc get pods --selector app=replace-with-app-name -o jsonpath={.items[?(@.status.phase=='Running')].metadata.name} > temp.txt
set /p PODNAME= <temp.txt
del temp.txt
oc port-forward %PODNAME% 8000 3000 3001
答案 0 :(得分:0)
您需要Pod名称才能向前移植,但是您当然可以以编程方式一致地获取该名称,因此您不必每次都进行适当的更新。
您可以通过jsonpath,go template,bash等多种方式来执行此操作。一个示例是使用以下内容,并根据需要替换您的应用名称:
oc get pod -l app=replace-me -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}'