[英]Start database container with mounted config file in Github actions workflow
I'd like to run some integration tests against a real database, but I fail to start an additional container (for the db), because I need to mount a config file that is in my repo before it is starting up.我想对真实数据库运行一些集成测试,但我无法启动额外的容器(用于数据库),因为我需要在启动之前安装我的存储库中的配置文件。
This is how I use the database on my local computer (docker-compose):这是我在本地计算机 (docker-compose) 上使用数据库的方式:
gremlin-server:
image: tinkerpop/gremlin-server:3.5
container_name: 'gremlin-server'
entrypoint: ./bin/gremlin-server.sh conf/gremlin-server-config.yaml
networks:
- graphdb_net
ports:
- 8182:8182
volumes:
- ./conf/gremlin-server-config.yaml:/opt/gremlin-server/conf/gremlin-server-config.yaml
- ./conf/tinkergraph-empty.properties:/opt/gremlin-server/conf/tinkergraph-
I guess I cannot use a service container as the code is not available at the time the service container is started, therefore it won't pick up my configuration.我想我不能使用服务容器,因为在服务容器启动时代码不可用,因此它不会选择我的配置。
That's why I tried to run a container within my container using --network host
(see below) and the container seems to be running fine, still I'm not able to curl it.这就是为什么我尝试使用
--network host
(见下文)在我的容器中运行一个容器并且容器似乎运行良好,但我仍然无法卷曲它。
- name: Start DB for tests
run: |
docker run -d \
--network host \
-v ${{ github.workspace }}/dev/conf/gremlin-server-config.yaml:/opt/gremlin-server/conf/gremlin-server-config.yaml \
-v ${{ github.workspace }}/dev/conf/tinkergraph-empty.properties:/opt/gremlin-server/conf/tinkergraph-empty.properties \
tinkerpop/gremlin-server:3.5
- name: Test connection
run: |
curl "localhost:8182/gremlin?gremlin=g.V().valueMap()"
According to the documentation about the job context the id of the container network should be available ( {{job.container.network}}
) but is empty if you don't use any job-level service or container.根据有关作业上下文的文档,容器网络的 id 应该可用(
{{job.container.network}}
)但如果您不使用任何作业级服务或容器,则为空。
Any ideas what I could try next?任何想法我接下来可以尝试什么?
This is what I ended up with: I'm now using docker-compose to run the integration tests (on my local computer as well as on GitHub Actions).这就是我的结果:我现在使用 docker-compose 来运行集成测试(在我的本地计算机以及 GitHub Actions 上)。 I'm just mounting the entire directory/repo in the
test
container.我只是在
test
容器中安装整个目录/repo。 Pulling the node:14-slim
delays the build by some seconds, but I guess it's still the best option:拉动
node:14-slim
会使构建延迟几秒钟,但我想它仍然是最好的选择:
version: "3.2"
services:
gremlin-server:
image: tinkerpop/gremlin-server:3.5
container_name: 'gremlin-server'
entrypoint: ./bin/gremlin-server.sh conf/gremlin-server-config.yaml
networks:
- graphdb_net
ports:
- 8182:8182
volumes:
- ./data/:/opt/gremlin-server/data/
- ./conf/gremlin-server-config.yaml:/opt/gremlin-server/conf/gremlin-server-config.yaml
- ./conf/tinkergraph-empty.properties:/opt/gremlin-server/conf/tinkergraph-empty.properties
- ./conf/initData.groovy:/opt/gremlin-server/scripts/initData.groovy
test:
image: node:14-slim
working_dir: /app
depends_on:
- gremlin-server
networks:
- graphdb_net
volumes:
- ../:/app
environment:
- NEPTUNE_CONNECTION_STRING=ws://gremlin-server:8182
command:
yarn test
networks:
graphdb_net:
driver: bridge
and I'm running them like this in my workflow:我在我的工作流程中像这样运行它们:
- name: Spin up test environment
run: |
docker compose -f dev/docker-compose.yaml pull
docker compose -f dev/docker-compose.yaml build
- name: Run tests
run: |
docker compose -f dev/docker-compose.yaml run test
It's based on @DannyB's suggestion and his answer here so all props go to him.它基于@DannyB 的建议和他在此处的回答,因此所有道具都归他所有。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.