Получение java. net .SocketTimeoutException: время ожидания подключения истекло во время AWS CodeBuild - PullRequest
1 голос
/ 09 июля 2020

Во время приемочного тестирования в AWS CodeBuild мы можем запросить .jar в конвейере, но команда, вызывающая .jar, не выполняется (URL-адреса и IP-адреса изменены в этом примере для целей обфускации):

[Container] 2020/07/08 14:53:37 Running command java -jar qa-jenkins-cli.jar -s https://example.com/jenkins/ -noCertificateCheck build RUN-l1-Regression -s -v -p ReasonForRun="AWS pipeline run" -p slavepool="DI" -p HOST_VALUES="127.0.0.1 sp.l1.example.com"
Skipping HTTPS certificate checks altogether. Note that this is not secure at all.
java.net.SocketTimeoutException: connect timed out
    at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
    at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
    at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
    at java.base/java.net.Socket.connect(Socket.java:609)
    at hudson.cli.CLI.connectViaCliPort(CLI.java:210)
    at hudson.cli.CLI.<init>(CLI.java:128)
    at hudson.cli.CLIConnectionFactory.connect(CLIConnectionFactory.java:72)
    at hudson.cli.CLI._main(CLI.java:479)
    at hudson.cli.CLI.main(CLI.java:390)
    Suppressed: java.io.EOFException: unexpected stream termination
        at hudson.remoting.ChannelBuilder.negotiate(ChannelBuilder.java:331)
        at hudson.remoting.Channel.<init>(Channel.java:422)
        at hudson.remoting.Channel.<init>(Channel.java:401)
        at hudson.remoting.Channel.<init>(Channel.java:397)
        at hudson.remoting.Channel.<init>(Channel.java:386)
        at hudson.remoting.Channel.<init>(Channel.java:378)
        at hudson.remoting.Channel.<init>(Channel.java:354)
        at hudson.cli.CLI.connectViaHttp(CLI.java:159)
        at hudson.cli.CLI.<init>(CLI.java:132)
        ... 3 more

[Container] 2020/07/08 14:54:01 Command did not exit successfully java -jar qa-jenkins-cli.jar -s https://example.com/jenkins/ -noCertificateCheck build RUN-l1-Regression -s -v -p ReasonForRun="AWS pipeline run" -p slavepool="DI" -p HOST_VALUES="127.0.0.1 sp.l1.example.com" exit status 255
[Container] 2020/07/08 14:54:01 Phase complete: PRE_BUILD State: FAILED
[Container] 2020/07/08 14:54:01 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: java -jar qa-jenkins-cli.jar -s https://example.com/jenkins/ -noCertificateCheck build RUN-l1-Regression -s -v -p ReasonForRun="AWS pipeline run" -p slavepool="DI" -p HOST_VALUES="127.0.0.1 sp.l1.example.com". Reason: exit status 255

Вот app-test-buildspe c .yml (wget работает):

# builld spec version.  keep at 0.2
# https://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html#build-spec-ref-versions
version: 0.2

phases:
  pre_build:
    commands:
      #- echo "Installing jq (JSON parser)..."
      #- yum install -y jq gettext
      - echo "deploy_phase=${deploy_phase} developer_prefix=${developer_prefix} environment=${environment} account_id=${account_id} account_alias=${account_alias}"
      - $(cat version.json | jq -j '"export app_name=\(.app_name) app_version=\(.app_version) s3_version=\(.s3_version)"')
      - echo "app_name=${app_name} app_version=${app_version} s3_version=${s3_version} developer_prefix=${developer_prefix} environment=${environment}"
      - $(cat app-deploy.json | jq -j '"export UseFargate=\(.Parameters.UseFargate)"')
      - echo "UseFargate=${UseFargate}"
      - wget https://example.com/jenkins/jenkins-cli.jar -O qa-jenkins-cli.jar
      - java -jar qa-jenkins-cli.jar -s https://example.com/jenkins/ -noCertificateCheck build RUN-l1-Regression -s -v -p ReasonForRun="AWS pipeline run" -p slavepool="DI" -p HOST_VALUES="127.0.0.1 sp.l1.example.com"
  build:
    commands:
      - pip install boto3 pytest
      - pytest -o log_cli=true -o log_cli_level=INFO -v tests/test_ecs_cluster.py

artifacts:
  files:
    - '**/*'

У нас настроено зеркалирование DNS, чтобы определенные процессы AWS имеют доступ к локальным службам, таким как набор тестов, который мы пытаемся запустить здесь. Тесты выполняются в VP C из-за зеркалирования. Мы знаем, что зеркальное отображение работает, потому что можем выполнить команду wget, которая получает файл .jar. Мы нигде не можем увидеть этот вызов в журналах потоков.

Кто-нибудь знает, что здесь может происходить?

1 Ответ

1 голос
/ 18 июля 2020
• 1000 Извлеченные уроки - если вы собираетесь запускать гибридные системы с использованием комбинации AWS и локальных ресурсов, вы должны точно знать, какие ресурсы требуются и где они находятся. В крупномасштабной системе документация процессов может быть неточной или отсутствовать. У вас должны быть отличные инструменты, чтобы отследить точку, в которой возникает проблема (WireShark был здесь спасителем), чтобы вы могли понять, как исправить.
...