Heroku:由于`Procfile`命令,使用`gitlab-ci`部署的jhipster项目崩溃了

时间:2019-03-26 03:52:07

标签: maven spring-boot heroku jhipster gitlab-ci

我之前曾在jhipster-generator Github问题上问过这个问题。 但是仍然没有解决方案。

(有关更多信息,请访问Example Repository on my GitlabGithub issue#9426

我认为这与我从生成器获得的Procfile中的最终命令有关,这些命令的定义如下:

web: java $JAVA_OPTS -Xmx256m -jar target/*.war --spring.profiles.active=prod,heroku,no-liquibase --server.port=$PORT 
release: cp -R src/main/resources/config config && ./mvnw liquibase:update -Pheroku
  1. release:上无法执行命令cp -R ...,因为从gitlab-ci的最后一项工作开始,它可以正常工作并获得绿色响应。但是当我看到登录Heroku部署实例时,我得到了src/main/resource/config not found。然后,我尝试对ls * -ltr添加release:进行更多调查,发现甚至找不到src目录。只有target目录在那儿。

  2. 因此,我尝试再次从release:中删除Procfile行,然后从运行该应用程序的Heroku服务器收到崩溃的消息。

    • Log的某些部分
2019-03-26T03:18:10.547189+00:00 app[web.1]: 03:18:10.536 [localhost-startStop-1] ERROR org.springframework.boot.SpringApplication - Application run failed
2019-03-26T03:18:10.547217+00:00 app[web.1]: java.util.ServiceConfigurationError: javax.cache.spi.CachingProvider: Provider org.redisson.jcache.JCachingProvider not a subtype
...
2019-03-26T03:18:10.567009+00:00 app[web.1]: java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]]

但是,如果我使用命令jhipster heroku运行,它将以与.gitlab-ci.yml文件中定义的命令不同的方法进行部署。并且可以成功运行。

因此,由于我认为Heroku deployment documentation与我现在发现的问题最相关,我应该在Procfile上解决什么才能在Heroku上进行最终部署应该是?

任何帮助将不胜感激,并预先感谢您。

1 个答案:

答案 0 :(得分:0)

TLDR;

我做了这些事情,然后使用Gitlab-> Heroku的CI-CD可以正确地执行CI-CD。

Procfile处删除release:行,因为在执行.gitlab-ci.yml状态时deploy-to-production文件的作用是部署JAR文件,但不包括整个项目目录,因此不再需要从项目目录中复制文件。

现在,您可以在Gitlab管道上运行所有绿色,而在Deployed succeed上运行Heroku的CI-CD

但是有些问题会阻止您的应用正常运行。这就是我发现的东西。

# ===================================================================
# Spring Boot configuration for the "heroku" profile.
#
# This configuration overrides the application.yml file.
# ===================================================================

# ===================================================================
# Standard Spring Boot properties.
# Full reference is available at:
# http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
# ===================================================================

eureka:
    instance:
        hostname: jhip-cicd-bug.herokuapp.com
        non-secure-port: 80
        prefer-ip-address: false

spring:
    datasource:
        type: com.zaxxer.hikari.HikariDataSource
        url: ${JDBC_DATABASE_URL}
        username: ${JDBC_DATABASE_USERNAME}
        password: ${JDBC_DATABASE_PASSWORD}
        hikari:
            maximumPoolSize: 8
    data:
        jest:
            uri: ${BONSAI_URL}
  • 未创建application-heroku.yml文件,即对环境变量${JDBC_DATABASE_URL}${JDBC_DATABASE_USERNAME}${JDBC_DATABASE_PASSWORD}的引用,仅创建的内容是DATABASE_URL,其中包含与postgres://[generated-user]:[generated-secret]@[generated-url]:5432/[generated-dbname]
  • 上错了
    • 不是以jdbc:开头
    • 环境变量名称与上面定义的DATABASE_URL不同(不等于JDBC_DATABASE_URL,并且未创建${JDBC_DATABASE_USERNAME}${JDBC_DATABASE_PASSWORD}。然后,我的解决方法是在Heroku设置-> Config vars中创建这些环境变量,并正确编辑其值,例如...
    • JDBC_DATABASE_URLjdbc:postgres://[url]:5432/[dbname]
    • JDBC_DATABASE_USERNAME[username]
    • JDBC_DATABASE_PASSWORD[password]
    • 或者您可以将url: ${JDBC_DATABASE_URL}更改为url: jdbc:${DATABASE_URL}(从不尝试,对结果不满意)。