【问题标题】:Service dependent on other services - wercker ci服务依赖于其他服务 - wercker ci
【发布时间】:2017-07-14 18:08:55
【问题描述】:

我正在使用 wercker 自动测试和部署 API 客户端,方法是将 API 服务器作为私有服务与 redis 和 postgres 服务(所有应用程序级别)一起运行,以对客户端进行集成测试。这种设置理论上允许我的客户端与 api 服务器交互,并且客户端和服务器都能够使用相同的 postgres 和 redis 服务。

我的私有服务依赖于数据库服务,因此需要在启动时将这些服务的主机和端口(暴露的环境变量)作为环境变量注入到其容器中。但是,我无法从声明它们的同一服务块中访问这些公开的连接变量。

我在下面发布了我的 wercker.yml 的一部分:

 - id: postgres
   env:
       POSTGRES_PASSWORD: $POSTGRES_PASSWORD
       POSTGRES_USER: $POSTGRES_USER
       POSTGRES_DB: $POSTGRES_DB

 - redis

 # - spotify/cassandra

 - name: realtime
   id: quay.io/ndustrialio/realtime-api-service
   username: $QUAY_USERNAME
   password: $QUAY_PASSWORD
   tag: latest
   registry: https://quay.io
   env:
       CLIENT_ID: $CLIENT_ID
       CLIENT_SECRET: $CLIENT_SECRET
       POSTGRES_USER: $POSTGRES_USER
       POSTGRES_PASSWORD: $POSTGRES_PASSWORD
       POSTGRES_DB: $POSTGRES_DB
       POSTGRES_HOST: $POSTGRES_PORT_5432_TCP_ADDR
       NODE_ENV: wercker_test
       REDIS_HOST: $REDIS_PORT_6379_TCP_ADDR
       REDIS_PORT: 6379
       REDIS_DB: 0
       CASSANDRA_HOSTS: cassandra

实时服务容器中的环境变量 $REDIS_PORT_6379_TCP_ADDR 和 $POSTGRES_PORT_5432_TCP_ADDR 为空。如何在我的实时服务中访问这些变量?

【问题讨论】:

  • 如果我没有正确理解您的问题,$REDIS_PORT_6379_TCP_ADDR 是您在 Wercker 控制面板中设置的 Wercker 环境变量,对吗?
  • 是redis服务暴露的环境变量(见devcenter.wercker.com/docs/services/linking-services),所以我没有明确设置。
  • 哦,我明白了,您正在将 docker 容器本地的环境变量 REDIS_HOST 设置为等于 $REDIS_PORT_6379_TCP_ADDR 的值 - 但 REDIS_HOST 最终为空?
  • 是的,没错
  • 嗯 - 您是否尝试过就此事联系 Wercker 支持?如果没有真正看到整个设置,很难缩小范围。是否有可能您的 env 变量的名称有误?

标签: continuous-integration integration-testing wercker


【解决方案1】:

解决办法是依靠Service Container Networking

您的 postgres 服务的 IP 具有从其 id 派生的主机名,因此您只需替换 POSTGRES_HOST: $POSTGRES_PORT_5432_TCP_ADDR POSTGRES_HOST: postgres

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    相关资源
    最近更新 更多