Google Cloud Debugger 找不到 Spring 部署为 Cloud 运行 服务的启动 Web 应用程序
Google Cloud Debugger can't find Spring Boot web app deployed as Cloud Run service
我按照指南 (https://cloud.google.com/debugger/docs/setup/java#cloud-run) 为我的云 运行 服务设置了云调试器。一切看起来都应该有效。但是调试器 UI 告诉我它找不到任何应用程序。
但是我做了文档中建议的所有事情
- 源代码在源代码库
- Cloud Build 在
master
推送时触发
- 我下载了
cdbg-java-agent.so
- 我 运行 带有
-agentpath
选项的 java 应用程序
- 正在通过
cloudbuild.yaml
部署云 运行 服务
- 云 运行 服务正常启动并运行
但是正如您在屏幕截图中看到的那样,我的应用程序在成功部署后无法找到。
以下是我的配置的一些细节:
- Spring 引导 v2.4.2
- 科特林 1.4.21
这是我的 Dockerfile
FROM gradle:6.7.0-jdk14 as build
USER root
WORKDIR /dist
ADD . /dist
RUN gradle assemble
FROM alpine as agent
USER root
WORKDIR /agent
RUN wget -qO- https://storage.googleapis.com/cloud-debugger/compute-java/debian-wheezy/cdbg_java_agent_gce.tar.gz | tar xvz
FROM openjdk:14-slim
WORKDIR /app
COPY --from=agent /agent/cdbg_java_agent.so agent.so
COPY --from=build /dist/build/libs/user-service.jar app.jar
EXPOSE 8080
CMD ["java", "-agentpath:/app/agent.so", "-Dcom.google.cdbg.breakpoints.enable_canary=false", "-jar", "app.jar"]
这是 docker 构建输出
Deploying '<unknown> Dockerfile: Dockerfile'...
Building image...
Preparing build context archive...
[==================================================>]1855/1855 files
Done
Sending build context to Docker daemon...
[==================================================>] 76.19MB
Done
Step 1/15 : FROM gradle:6.7.0-jdk14 as build
---> 5af4d25725b2
Step 2/15 : USER root
---> Using cache
---> c97e9145e3e1
Step 3/15 : WORKDIR /dist
---> Using cache
---> 468fff36a2e7
Step 4/15 : ADD . /dist
---> c435bd2ffde9
Step 5/15 : RUN gradle assemble
---> Running in 70f5c69b7dde
Welcome to Gradle 6.7!
Here are the highlights of this release:
- File system watching is ready for production use
- Declare the version of Java your build requires
- Java 15 support
For more details see https://docs.gradle.org/6.7/release-notes.html
Starting a Gradle Daemon (subsequent builds will be faster)
> Task :compileKotlin
> Task :compileJava NO-SOURCE
> Task :processResources
> Task :classes
> Task :bootJarMainClassName
> Task :bootJar
> Task :inspectClassesForKotlinIC
> Task :jar SKIPPED
> Task :assemble
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.7/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 1m 48s
5 actionable tasks: 5 executed
Removing intermediate container 70f5c69b7dde
---> 5bbd9485f873
Step 6/15 : FROM alpine as agent
---> 28f6e2705743
Step 7/15 : USER root
---> Using cache
---> 4a0572e8ff4a
Step 8/15 : WORKDIR /agent
---> Using cache
---> 0374735af05d
Step 9/15 : RUN wget -qO- https://storage.googleapis.com/cloud-debugger/compute-java/debian-wheezy/cdbg_java_agent_gce.tar.gz | tar xvz
---> Using cache
---> ef141a7d5acc
Step 10/15 : FROM openjdk:14-slim
---> 38fca30874ab
Step 11/15 : WORKDIR /app
---> Using cache
---> 4dd576d38d65
Step 12/15 : COPY --from=agent /agent/cdbg_java_agent.so agent.so
---> Using cache
---> ff5fc93d2d5e
Step 13/15 : COPY --from=build /dist/build/libs/user-service.jar app.jar
---> 4b009124345f
Step 14/15 : EXPOSE 8080
---> Running in 99f71fb86534
Removing intermediate container 99f71fb86534
---> 38fcd9d00999
Step 15/15 : CMD ["java", "-agentpath:/app/agent.so", "-Dcom.google.cdbg.breakpoints.enable_canary=false", "-jar", "app.jar"]
---> Running in 309f35aed48f
Removing intermediate container 309f35aed48f
---> 43757d33b2ee
Successfully built 43757d33b2ee
Existing container found: 94d3fab4505461e8e694b61909ba1f7d827d8f7078b4dd8d1d36d4c4e0a0ac08, removing...
Creating container...
Container Id: b99675b5f6c00a0e5bec76999db04abf92eab29d257ee887bcea123a02789850
Container name: '/quirky_stonebraker'
Attaching to container '/quirky_stonebraker'...
Starting container '/quirky_stonebraker'
'<unknown> Dockerfile: Dockerfile' has been deployed successfully.
容器 运行 与上述已部署的云 运行 服务一样很好。
所以我不知道该怎么做才能完成这项工作。我希望有人能在这里帮助我
我还添加了我的 cloudbuild.yaml
以防相关
steps:
- name: 'gradle:6.8.3-jdk11'
entrypoint: 'gradle'
args: [ 'check', '-x', 'test']
- name: 'gradle:6.8.3-jdk11'
entrypoint: 'gradle'
args: [ 'test']
- name: 'gradle:6.8.3-jdk11'
entrypoint: 'gradle'
args: [ 'integration-test']
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'eu.gcr.io/$PROJECT_ID/user-service:$BUILD_ID', '.' ]
- name: 'gcr.io/cloud-builders/docker'
args: [ 'push', 'eu.gcr.io/$PROJECT_ID/user-service:$BUILD_ID' ]
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: gcloud
args:
- 'alpha'
- 'run'
- 'deploy'
- 'user-service'
- '--image=eu.gcr.io/$PROJECT_ID/user-service:$BUILD_ID'
- '--concurrency=10'
- '--cpu=1'
- '--memory=512Mi'
- '--region=europe-west3'
- '--max-instances=2'
- '--platform=managed'
- '--port=8080'
- '--timeout=3000'
- '--set-env-vars=SQL_CONNECTION=10.28.96.3, SQL_USER=test, SQL_PASSWORD=test'
- '--set-env-vars=AUTH0_DOMAIN=prototype.eu.auth0.com, AUTH0_CLIENT_ID=123, AUTH0_CLIENT_SECRET=123'
- '--set-env-vars=^#^SPRING_PROFILES_ACTIVE=prod'
- '--allow-unauthenticated'
- '--ingress=internal'
- '--vpc-connector=cloud-run'
- '--vpc-egress=private-ranges-only'
- '--set-cloudsql-instances=$PROJECT_ID:europe-west1:prototype'
images:
- 'eu.gcr.io/$PROJECT_ID/user-service:$BUILD_ID'
timeout: 3000s
如果您查看压缩代理文件中的内容,您会注意到其中有几个文件名为:
- cdbg_java_agent.so
- cdbg_java_agent_internals.jar
- version.txt
您遇到这个问题是因为您没有将 internals.jar 文件复制到 /app 目录。共享对象文件具有依赖性,这可以解释为什么指示用户为调试器创建一个单独的目录。
要解决此问题,请像这样将丢失的文件添加到您的 Dockerfile 中:
COPY --from=agent /agent/cdbg_java_agent.so agent.so
COPY --from=agent /agent/cdbg_java_agent_internals.jar cdbg_java_agent_internals.jar
COPY --from=build /dist/build/libs/user-service.jar app.jar
然后等待大约。大约 5 分钟,直到您的服务出现在调试器上。注意源码不会出现automatically unless it's located on a Git repo. For that you have to select the source code manually.
我按照指南 (https://cloud.google.com/debugger/docs/setup/java#cloud-run) 为我的云 运行 服务设置了云调试器。一切看起来都应该有效。但是调试器 UI 告诉我它找不到任何应用程序。
但是我做了文档中建议的所有事情
- 源代码在源代码库
- Cloud Build 在
master
推送时触发 - 我下载了
cdbg-java-agent.so
- 我 运行 带有
-agentpath
选项的 java 应用程序 - 正在通过
cloudbuild.yaml
部署云 运行 服务
- 云 运行 服务正常启动并运行
但是正如您在屏幕截图中看到的那样,我的应用程序在成功部署后无法找到。
以下是我的配置的一些细节:
- Spring 引导 v2.4.2
- 科特林 1.4.21
这是我的 Dockerfile
FROM gradle:6.7.0-jdk14 as build
USER root
WORKDIR /dist
ADD . /dist
RUN gradle assemble
FROM alpine as agent
USER root
WORKDIR /agent
RUN wget -qO- https://storage.googleapis.com/cloud-debugger/compute-java/debian-wheezy/cdbg_java_agent_gce.tar.gz | tar xvz
FROM openjdk:14-slim
WORKDIR /app
COPY --from=agent /agent/cdbg_java_agent.so agent.so
COPY --from=build /dist/build/libs/user-service.jar app.jar
EXPOSE 8080
CMD ["java", "-agentpath:/app/agent.so", "-Dcom.google.cdbg.breakpoints.enable_canary=false", "-jar", "app.jar"]
这是 docker 构建输出
Deploying '<unknown> Dockerfile: Dockerfile'...
Building image...
Preparing build context archive...
[==================================================>]1855/1855 files
Done
Sending build context to Docker daemon...
[==================================================>] 76.19MB
Done
Step 1/15 : FROM gradle:6.7.0-jdk14 as build
---> 5af4d25725b2
Step 2/15 : USER root
---> Using cache
---> c97e9145e3e1
Step 3/15 : WORKDIR /dist
---> Using cache
---> 468fff36a2e7
Step 4/15 : ADD . /dist
---> c435bd2ffde9
Step 5/15 : RUN gradle assemble
---> Running in 70f5c69b7dde
Welcome to Gradle 6.7!
Here are the highlights of this release:
- File system watching is ready for production use
- Declare the version of Java your build requires
- Java 15 support
For more details see https://docs.gradle.org/6.7/release-notes.html
Starting a Gradle Daemon (subsequent builds will be faster)
> Task :compileKotlin
> Task :compileJava NO-SOURCE
> Task :processResources
> Task :classes
> Task :bootJarMainClassName
> Task :bootJar
> Task :inspectClassesForKotlinIC
> Task :jar SKIPPED
> Task :assemble
Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.7/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 1m 48s
5 actionable tasks: 5 executed
Removing intermediate container 70f5c69b7dde
---> 5bbd9485f873
Step 6/15 : FROM alpine as agent
---> 28f6e2705743
Step 7/15 : USER root
---> Using cache
---> 4a0572e8ff4a
Step 8/15 : WORKDIR /agent
---> Using cache
---> 0374735af05d
Step 9/15 : RUN wget -qO- https://storage.googleapis.com/cloud-debugger/compute-java/debian-wheezy/cdbg_java_agent_gce.tar.gz | tar xvz
---> Using cache
---> ef141a7d5acc
Step 10/15 : FROM openjdk:14-slim
---> 38fca30874ab
Step 11/15 : WORKDIR /app
---> Using cache
---> 4dd576d38d65
Step 12/15 : COPY --from=agent /agent/cdbg_java_agent.so agent.so
---> Using cache
---> ff5fc93d2d5e
Step 13/15 : COPY --from=build /dist/build/libs/user-service.jar app.jar
---> 4b009124345f
Step 14/15 : EXPOSE 8080
---> Running in 99f71fb86534
Removing intermediate container 99f71fb86534
---> 38fcd9d00999
Step 15/15 : CMD ["java", "-agentpath:/app/agent.so", "-Dcom.google.cdbg.breakpoints.enable_canary=false", "-jar", "app.jar"]
---> Running in 309f35aed48f
Removing intermediate container 309f35aed48f
---> 43757d33b2ee
Successfully built 43757d33b2ee
Existing container found: 94d3fab4505461e8e694b61909ba1f7d827d8f7078b4dd8d1d36d4c4e0a0ac08, removing...
Creating container...
Container Id: b99675b5f6c00a0e5bec76999db04abf92eab29d257ee887bcea123a02789850
Container name: '/quirky_stonebraker'
Attaching to container '/quirky_stonebraker'...
Starting container '/quirky_stonebraker'
'<unknown> Dockerfile: Dockerfile' has been deployed successfully.
容器 运行 与上述已部署的云 运行 服务一样很好。 所以我不知道该怎么做才能完成这项工作。我希望有人能在这里帮助我
我还添加了我的 cloudbuild.yaml
以防相关
steps:
- name: 'gradle:6.8.3-jdk11'
entrypoint: 'gradle'
args: [ 'check', '-x', 'test']
- name: 'gradle:6.8.3-jdk11'
entrypoint: 'gradle'
args: [ 'test']
- name: 'gradle:6.8.3-jdk11'
entrypoint: 'gradle'
args: [ 'integration-test']
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'eu.gcr.io/$PROJECT_ID/user-service:$BUILD_ID', '.' ]
- name: 'gcr.io/cloud-builders/docker'
args: [ 'push', 'eu.gcr.io/$PROJECT_ID/user-service:$BUILD_ID' ]
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: gcloud
args:
- 'alpha'
- 'run'
- 'deploy'
- 'user-service'
- '--image=eu.gcr.io/$PROJECT_ID/user-service:$BUILD_ID'
- '--concurrency=10'
- '--cpu=1'
- '--memory=512Mi'
- '--region=europe-west3'
- '--max-instances=2'
- '--platform=managed'
- '--port=8080'
- '--timeout=3000'
- '--set-env-vars=SQL_CONNECTION=10.28.96.3, SQL_USER=test, SQL_PASSWORD=test'
- '--set-env-vars=AUTH0_DOMAIN=prototype.eu.auth0.com, AUTH0_CLIENT_ID=123, AUTH0_CLIENT_SECRET=123'
- '--set-env-vars=^#^SPRING_PROFILES_ACTIVE=prod'
- '--allow-unauthenticated'
- '--ingress=internal'
- '--vpc-connector=cloud-run'
- '--vpc-egress=private-ranges-only'
- '--set-cloudsql-instances=$PROJECT_ID:europe-west1:prototype'
images:
- 'eu.gcr.io/$PROJECT_ID/user-service:$BUILD_ID'
timeout: 3000s
如果您查看压缩代理文件中的内容,您会注意到其中有几个文件名为:
- cdbg_java_agent.so
- cdbg_java_agent_internals.jar
- version.txt
您遇到这个问题是因为您没有将 internals.jar 文件复制到 /app 目录。共享对象文件具有依赖性,这可以解释为什么指示用户为调试器创建一个单独的目录。
要解决此问题,请像这样将丢失的文件添加到您的 Dockerfile 中:
COPY --from=agent /agent/cdbg_java_agent.so agent.so
COPY --from=agent /agent/cdbg_java_agent_internals.jar cdbg_java_agent_internals.jar
COPY --from=build /dist/build/libs/user-service.jar app.jar
然后等待大约。大约 5 分钟,直到您的服务出现在调试器上。注意源码不会出现automatically unless it's located on a Git repo. For that you have to select the source code manually.