【发布时间】:2021-03-25 13:19:13
【问题描述】:
我有这个docker-compose.yml
version: '3.4'
services:
localstack:
image: localstack/localstack:0.11.2
environment:
- AWS_DEFAULT_REGION=us-east-1
- EDGE_PORT=4566
- SERVICES=sns,sqs
ports:
- "4566:4566"
volumes:
- "${TMPDIR:-/tmp/localstack}:/tmp/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"
healthcheck:
test:
- CMD
- bash
- -c
- awslocal sns list-topics
&& awslocal sqs list-queues
interval: 5s
timeout: 10s
retries: 10
这样,它会利用容器有可用的awslocal 命令来检查healtheck。
假设我需要对 localstack 运行一些测试并且我想等待 localstack 服务启动并运行,那么 GitLab 的等价物是什么?
类似这样的:
tests:
stage: test
services:
- name: localstack/localstack:0.11.2
alias: localstack
variables:
AWS_DEFAULT_REGION: "us-east-1"
EDGE_PORT: "4566"
SERVICES: "sns,sqs"
before_script:
# should I use before_script? is there a better way? What's the linux command to test the same and wait?
script: dotnet test --blame --configuration Release
rules:
- exists:
- test/**/*Tests.csproj
更新 1:
一种可能的技巧是使用before_script,但很高兴听到更好的内置解决方案。这也不起作用
/bin/bash: line 125: awslocal: command not found
Failed rounds=9
但这是我的尝试
tests:
stage: test
services:
- name: localstack/localstack:0.11.2
alias: localstack
variables:
AWS_DEFAULT_REGION: "us-east-1"
EDGE_PORT: "4566"
SERVICES: "sns,sqs"
before_script:
- rounds=10;
while [ $rounds -gt 0 ]; do
awslocal sns list-topics && awslocal sqs list-queues && echo OK && break || echo Failed
rounds=$(($rounds - 1));
sleep 5;
done;
script: dotnet test --blame --configuration Release
rules:
- exists:
- test/**/*Tests.csproj
【问题讨论】:
标签: bash docker-compose gitlab-ci