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}'