jHipster App可能因CloudFoundry激活了云配置文件而崩溃

时间:2019-01-02 18:51:25

标签: jhipster cloudfoundry gitlab-ci

我的小型jhipster应用程序“ customerapp”的部署失败,这可能是因为Cloud Foundry除了配置文件“ dev”之外还设置了配置文件“ cloud”。我在Cloud Foundry中使用几个空间用于开发的不同阶段:开发,暂存和生产。

我使用了jhipster生成器,添加了一些实体客户,地址和联系人。应用程序在本地运行,没有任何问题。

我还使用gitlab-ci来构建,测试和部署我的软件。我的.gitlab-ci.yml看起来像这样(我删除了一些不必要的部分)。

image: mydockerregistry.xxxxx.de/jutoro/jhipster_test/jhipster-dockerimage

services:
  - docker:dind

cache:
   key: "$CI_BUILD_REF_NAME"
  paths:
    - node_modules
    - .maven

 before_script:
   - chmod +x mvnw
   - export MAVEN_USER_HOME=`pwd`/.maven

 stages:
   - build
   - package
   - deployToCF

 mvn-build:
   stage: build
   only:
    - dev
    - prod
   script: 
     - npm install
     - ./mvnw compile -DskipTests -Dmaven.repo.local=$MAVEN_USER_HOME - 
Dspring.profiles.active=dev

 mvn-package-dev:
  stage: package
  only:
    - dev   
  script:
    - npm install    
    - ./mvnw package -Pdev -DskipTests -Dmaven.repo.local=$MAVEN_USER_HOME -Dspring.profiles.active=dev
  artifacts:
      paths:
        - target/*.war  

mvn-package-prod:
  stage: package
  only:
    - prod 
  script:    
    - npm install    
    - ./mvnw package -Pprod -DskipTests -Dmaven.repo.local=$MAVEN_USER_HOME -Dspring.profiles.active=prod
  artifacts:
      paths:
        - target/*.war     

deployToCloudFoundry-dev:
  image: pivotalpa/cf-cli-resource
  stage: deployToCF
  only:
    - dev
  cache:
    paths:
      - bin/
  script:
   - bash ci/scripts/deployToCloudFoundry.sh  

deployToCloudFoundry-prod:
  image: pivotalpa/cf-cli-resource
  stage: deployToCF
  only:
    - prod
  cache:
    paths:
      - bin/
  script:
    - bash ci/scripts/deployToCloudFoundry.sh

DOCKERFILE(也使用gitlab-ci构建并添加到我们的docker存储库中):

# DOCKER-VERSION 1.8.2
FROM openjdk:8
MAINTAINER Robert Zieschang 

RUN apt-get install -y curl
# install node.js
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash -
RUN apt-get install -y nodejs python g++ build-essential && \
apt-get clean && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# install yeoman
RUN npm install -g yo

deplpoyToCloudFoundry.sh Shell脚本:

cf login -a $CF_API_ENDPOINT -u $CF_USER -p $CF_PASS -o "${CF_ORG^^}" -s  ${CI_COMMIT_REF_NAME^^} 
cf push -n $CI_PROJECT_NAME-$CI_COMMIT_REF_NAME 

我的清单文件:

---
applications:
- name: customerapp
  memory: 1024M
  #buildpack: https://github.com/cloudfoundry/java-buildpack#v3.19.2
  path: target/customerapp-0.0.1-SNAPSHOT.war
  services:
  - postgresql
  env:
    #SPRING_PROFILES_ACTIVE: dev
    #SPRING_PROFILES_DEFAULT: dev
    #JAVA_OPTS: -Dspring.profiles.active=dev

管道运行良好,该应用程序也打包到war文件中,并且也上传到了Cloud Foundry,但是它崩溃了,我认为这是因为Cloud Foundry仍然以某种方式应用了“ cloud”配置文件,并且覆盖了jhipsters的重要配置'dev'个人资料。

 [...]
2019-01-02T19:03:16.05+0100 [APP/PROC/WEB/0] OUT 2019-01-02 18:03:16.055  INFO 8 --- [           main] pertySourceApplicationContextInitializer : 'cloud' property source added
2019-01-02T19:03:16.05+0100 [APP/PROC/WEB/0] OUT 2019-01-02 18:03:16.056  INFO 8 --- [           main] nfigurationApplicationContextInitializer : Reconfiguration enabled
2019-01-02T19:03:16.06+0100 [APP/PROC/WEB/0] OUT 2019-01-02 18:03:16.064  INFO 8 --- [           main] com.jutoro.cco.CustomerappApp            : The following profiles are active: cloud,dev,swagger     
[...]

这随后导致:     2019-01-02T19:03:29.17 + 0100 [APP / PROC / WEB / 0] OUT 2019-01-02 18:03:29.172错误8 --- [main] com.jutoro.cco.CustomerappApp:您配置错误你的申请!它不应同时运行“ dev”和“ cloud”配置文件。     [...]

之后,Cloud Foundry停止了该应用程序。

2019-01-02T19:04:11.09+0100 [CELL/0] OUT Cell 83899f60-78c9-4323-8d3c-e6255086c8a7 stopping instance 74be1834-b656-4445-506c-bdfa

生成的application-dev.yml和bootstrap.yml在某些地方刚刚被修改:

bootstrap.yml

        uri: https://admin:${jhipster.registry.password}@url.tomy.jhipsterregistryapp/config

        name: customerapp
        profile: dev # profile(s) of the property source
        label: config-dev 

application-dev.yml

client:
    service-url:
        defaultZone: https://admin:${jhipster.registry.password}@url.tomy.jhipsterregistryapp/eureka/

我如何尝试在cf中设置开发者资料:

  • 除了-Pdev之外,还在gitlab-ci.yml中添加了-Dspring.profiles.active = dev
  • 在清单env:部分中添加了SPRING_PROFILES_ACTIVE:dev
  • 在清单env:部分中添加了SPRING_PROFILES_DEFAULT:dev
  • 添加了SPRING_APPLICATION_JSON:{“ spring.cloud.dataflow.applicationProperties.stream.spring.profiles.active”:“ dev”}(如https://github.com/spring-cloud/spring-cloud-dataflow/issues/2317中所述)
  • 在清单env:部分中添加了JAVA_OPTS:-Dspring.profiles.active = dev(cv env customerapp显示已设置)
  • 使用cf set-env和cf restage设置JAVA_OPTS -Dspring.profiles.active = dev

感谢您的帮助。

问候 罗伯特

2 个答案:

答案 0 :(得分:1)

请先忘记答案。事实证明,这是一个数据源问题,导致应用程序无法响应心跳。 取消注释

#hibernate.connection.provider_disables_autocommit: true 

在应用程序属性中解决此问题。

答案 1 :(得分:0)

也许任何“未来”的人都可能偶然发现相同的行为。

我能够将jhipster应用程序部署到Cloud Foundry。 我以某种方式“修复”了它,但我不知道会有更多后果。

结果证明,Cloud Foundry在通过标准“健康检查”类型的http(应该是“心跳”)监视我的jhipster应用程序时遇到问题? 因此,我决定将监视行为切换为不心跳的方式。 只需将运行状况检查类型切换为在manifest.yml文件中处理即可。

health-check-type: process

该应用程序现在正在运行。