服务依赖于其他服务 - wercker ci

时间:2017-07-14 18:08:56

标签: continuous-integration integration-testing wercker

我正在使用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为空。如何在实时服务中访问这些变量?

1 个答案:

答案 0 :(得分:0)

解决方案是依靠Service Container Networking

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