1

我们有一个 Spring Boot 应用程序(多个微服务),使用 Google Container Builder 打包并发布到注册表。我们的cloudbuild.yaml样子是这样的:

steps:
- name: 'gcr.io/cloud-builders/java/gradle'
  id: 'java-build'
  args: ['build']

- name: 'gcr.io/cloud-builders/docker'
  args: ['build', 
         '-t', 'gcr.io/$PROJECT_ID/api-auth:$COMMIT_SHA',
         '-t', 'gcr.io/$PROJECT_ID/api-auth:latest',
         '-f', './api-auth/Dockerfile', './api-auth']
  waitFor: ['java-build']
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', 
         '-t', 'gcr.io/$PROJECT_ID/api-user:$COMMIT_SHA',
         '-t', 'gcr.io/$PROJECT_ID/api-user:latest',
         '-f', './api-user/Dockerfile', './api-user']
  waitFor: ['java-build']

images:
- 'gcr.io/$PROJECT_ID/api-auth:$COMMIT_SHA'
- 'gcr.io/$PROJECT_ID/api-auth:latest'
- 'gcr.io/$PROJECT_ID/api-user:$COMMIT_SHA'
- 'gcr.io/$PROJECT_ID/api-user:latest'

推送到 GitHub 上的存储库时由触发器调用。

如果我在本地运行它:

container-builder-local --dryrun=false .

生成的图像运行良好,例如:

docker run -e "SPRING_PROFILES_ACTIVE=development" -p 9000:9000 gcr.io/.../api-auth:latest

但是,当使用 Container Builder 在云中构建映像时,应用程序无法运行并失败并出现以前从未发生过的错误。

即使被拉动:

gcloud docker -- pull gcr.io/.../api-auth:latest

并在本地运行,新错误会阻止应用程序加载:

2017-10-11 16:35:27.661  WARN 5 --- [           main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'webSecurityConfig': Unsatisfied dependency expressed through field 'authenticationManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authenticationManager' defined in class path resource [org/springframework/boot/autoconfigure/security/AuthenticationManagerConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.security.authentication.AuthenticationManager]: Factory method 'authenticationManager' threw exception; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'OAuth2Config': Unsatisfied dependency expressed through field 'authenticationManager'; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'authenticationManager': Requested bean is currently in creation: Is there an unresolvable circular reference?
2017-10-11 16:35:27.663  INFO 5 --- [           main] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2017-10-11 16:35:27.676  INFO 5 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2017-10-11 16:35:27.718  INFO 5 --- [           main] utoConfigurationReportLoggingInitializer :

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2017-10-11 16:35:27.730 ERROR 5 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   :

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   webSecurityConfig (field private org.springframework.security.authentication.AuthenticationManager com.project.auth.config.WebSecurityConfig.authenticationManager)
┌─────┐
|  authenticationManager defined in class path resource [org/springframework/boot/autoconfigure/security/AuthenticationManagerConfiguration.class]
↑     ↓
|  OAuth2Config (field private org.springframework.security.authentication.AuthenticationManager com.project.auth.config.OAuth2Config.authenticationManager)
└─────┘

这只发生在镜像通过 Cloud Container Builder 时——既不是本地的,也不是本地的 gradle 构建。

这可能是云中的问题,还是我错过了一些微不足道的事情?


我也在GitHub 上提交了一个问题,但由于它是一个更广泛的问题以及应用程序的 Spring Boot 特性,我想我会在这里询问它是否响起任何铃声。

4

0 回答 0