【发布时间】:2019-01-02 18:51:24
【问题描述】:
我的小型 jhipster 应用程序“customerapp”的部署失败,可能是因为云代工除了配置文件“dev”之外还设置了配置文件“cloud”。我在 Cloud Foundry 中为不同的开发阶段使用了几个空间:dev、staging 和 prod。
我使用了 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 的重要配置“开发”配置文件。
[...]
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:您配置错误你的申请!它不应同时与“开发”和“云”配置文件一起运行。 [...]
在该云代工厂停止应用程序之后。
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 中设置什么开发配置文件:
- 在 gitlab-ci.yml 中添加了 -Dspring.profiles.active=dev 和 -Pdev
- 在清单 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
感谢任何帮助。
问候 罗伯特
【问题讨论】:
-
您可以设置
JBP_CONFIG_SPRING_AUTO_RECONFIGURATION: '[enabled: false]'告诉JBP 禁用spring 自动重新配置,这是添加云配置文件的原因。请小心,因为这也会禁用服务的自动重新配置。 -
谢谢@DanielMikusa,但我不完全知道,如果我关闭自动配置,会有什么后果。但我找到了一种部署方式。谢谢你的提示。
-
这取决于您的应用。例如,您有一个 DataSource,您可以将其配置为在本地工作。然后,当您推送到 CF 时,JBP 的自动重新配置将自动重新配置您的单个 DataSource 以指向绑定的数据库。它有点神奇并且有一些限制,所以 IMO 最好直接使用 Spring Cloud 连接器并显式配置您的数据源。如果你这样做了,那么禁用自动重新配置实际上并没有任何影响。
标签: jhipster cloud-foundry gitlab-ci