oc 命令根据服务名称而不是 pod 名称将本地端口转发到远程调试端口
oc-command to forward local-ports to remote debug ports based on service-name instead of pod-name
为了最大限度地减少使用 intelliJ 将调试会话附加到远程 pod(部署在 OpenShift 上的微服务)的设置时间,
我正在尝试充分利用远程调试配置的 'Before launch' 设置。
在使用以下命令行参数将调试器附加到 JVM 套接字之前,我使用了 2 个步骤(此设置有效但需要在每次新部署时进行编辑);
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000
第一步:
外部工具: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-command,它可以用于端口转发而无需提供 pod-name.(例如,基于服务名称)
或者一个完全不同的解决方案,允许我点击 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
您需要 pod 名称才能向前移植,但当然您可以以编程方式一致地获取它,这样您就不需要每次都进行更新。
您可以通过多种方式执行此操作,通过 jsonpath、go 模板、bash 等。一个示例是使用以下内容,根据需要替换您的应用程序名称:
oc get pod -l app=replace-me -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}'
为了最大限度地减少使用 intelliJ 将调试会话附加到远程 pod(部署在 OpenShift 上的微服务)的设置时间, 我正在尝试充分利用远程调试配置的 'Before launch' 设置。
在使用以下命令行参数将调试器附加到 JVM 套接字之前,我使用了 2 个步骤(此设置有效但需要在每次新部署时进行编辑);
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000
第一步: 外部工具: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-command,它可以用于端口转发而无需提供 pod-name.(例如,基于服务名称) 或者一个完全不同的解决方案,允许我点击 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
您需要 pod 名称才能向前移植,但当然您可以以编程方式一致地获取它,这样您就不需要每次都进行更新。
您可以通过多种方式执行此操作,通过 jsonpath、go 模板、bash 等。一个示例是使用以下内容,根据需要替换您的应用程序名称:
oc get pod -l app=replace-me -o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}'