Github 작업을 위해 도커가 부팅되었는지 확인하는 스크립트
6164 단어 githubactionsdockercomposedocker
배경
Github Actions에서 로컬 개발 및 테스트를 위한 시스템을 구축하기 위해 Docker(docker-compose)를 사용합니다. 내 지역에서는 컨테이너가 부팅되었는지 눈으로 확인할 수 있습니다. 그러나 Github Actions에서 도커 컨테이너가 부팅되었는지 확인하고 부팅 후 컨테이너에 대한 테스트를 실행하는 방법이 필요합니다. 간단하게 다음 Github Actions 설정을 생각해 냈습니다. 그러나 일반적으로 docker-compose up -d
의 완료가 컨테이너의 프로그램/서버가 준비되었음을 의미하지 않기 때문에 작동하지 않습니다.
jobs:
all:
name: My test
runs-on: ubuntu-18.04
steps:
- name: Docker compose up
run: docker-compose up -d
- name: Test
# run test for my containers. e.g. Access API servers
run: ...
솔루션: 상태를 확인하는 스크립트
대상 컨테이너 상태를 확인하기 위해 다음 bash 스크립트를 작성했습니다. 내 docker-compose에 healthcheck 설정이 있습니다(설정 방법을 알아보려면 참조). 매 초마다 상태를 확인하고 컨테이너가 정상이 되면 프로세스를 완료합니다. 프로그램이 제한 시간 내에 정상 상태가 되지 않으면 스크립트가 1로 종료됩니다.
# Name of the target container to check
container_name="$1"
# Timeout in seconds. Default: 60
timeout=$((${2:-60}));
if [ -z $container_name ]; then
echo "No container name specified";
exit 1;
fi
echo "Container: $container_name";
echo "Timeout: $timeout sec";
try=0;
is_healthy="false";
while [ $is_healthy != "true" ];
do
try=$(($try + 1));
printf "■";
is_healthy=$(docker inspect --format='{{json .State.Health}}' $container_name | jq '.Status == "healthy"');
sleep 1;
if [[ $try -eq $timeout ]]; then
echo " Container did not boot within timeout";
exit 1;
fi
done
이것은 스크립트를 실행하는 명령입니다.
healthcheck.sh <container_id|name> <timeout_in_sec>
현실적인 명령은 이래야 합니다. 120
컨테이너가 준비될 때까지 api
초 이하로 기다립니다. 그런 다음 test.sh
를 실행합니다(원하는 명령을 변경하십시오).
healthcheck.sh api 120 && test.sh
마지막으로 내 Github Actions에는 다음과 같은 형식이 있습니다.
jobs:
all:
name: My test
runs-on: ubuntu-18.04
steps:
- name: Docker compose up
run: docker-compose up -d
- name: Test
run: healthcheck.sh api 120 && test.sh
부록: 컨테이너 이름 수정
명시적인 이름이 없으면 docker-compose는 api_1
와 같은 컨테이너 이름을 지정하여 원하는 이름을 수정합니다. container_name
에서 docker-compose.yml
로 이름을 지정해야 합니다.
services:
api:
container_name: api
Reference
이 문제에 관하여(Github 작업을 위해 도커가 부팅되었는지 확인하는 스크립트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/ku6ryo/script-to-check-if-docker-booted-for-github-actions-138g
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
jobs:
all:
name: My test
runs-on: ubuntu-18.04
steps:
- name: Docker compose up
run: docker-compose up -d
- name: Test
# run test for my containers. e.g. Access API servers
run: ...
대상 컨테이너 상태를 확인하기 위해 다음 bash 스크립트를 작성했습니다. 내 docker-compose에 healthcheck 설정이 있습니다(설정 방법을 알아보려면 참조). 매 초마다 상태를 확인하고 컨테이너가 정상이 되면 프로세스를 완료합니다. 프로그램이 제한 시간 내에 정상 상태가 되지 않으면 스크립트가 1로 종료됩니다.
# Name of the target container to check
container_name="$1"
# Timeout in seconds. Default: 60
timeout=$((${2:-60}));
if [ -z $container_name ]; then
echo "No container name specified";
exit 1;
fi
echo "Container: $container_name";
echo "Timeout: $timeout sec";
try=0;
is_healthy="false";
while [ $is_healthy != "true" ];
do
try=$(($try + 1));
printf "■";
is_healthy=$(docker inspect --format='{{json .State.Health}}' $container_name | jq '.Status == "healthy"');
sleep 1;
if [[ $try -eq $timeout ]]; then
echo " Container did not boot within timeout";
exit 1;
fi
done
이것은 스크립트를 실행하는 명령입니다.
healthcheck.sh <container_id|name> <timeout_in_sec>
현실적인 명령은 이래야 합니다.
120
컨테이너가 준비될 때까지 api
초 이하로 기다립니다. 그런 다음 test.sh
를 실행합니다(원하는 명령을 변경하십시오).healthcheck.sh api 120 && test.sh
마지막으로 내 Github Actions에는 다음과 같은 형식이 있습니다.
jobs:
all:
name: My test
runs-on: ubuntu-18.04
steps:
- name: Docker compose up
run: docker-compose up -d
- name: Test
run: healthcheck.sh api 120 && test.sh
부록: 컨테이너 이름 수정
명시적인 이름이 없으면 docker-compose는 api_1
와 같은 컨테이너 이름을 지정하여 원하는 이름을 수정합니다. container_name
에서 docker-compose.yml
로 이름을 지정해야 합니다.
services:
api:
container_name: api
Reference
이 문제에 관하여(Github 작업을 위해 도커가 부팅되었는지 확인하는 스크립트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/ku6ryo/script-to-check-if-docker-booted-for-github-actions-138g
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
services:
api:
container_name: api
Reference
이 문제에 관하여(Github 작업을 위해 도커가 부팅되었는지 확인하는 스크립트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ku6ryo/script-to-check-if-docker-booted-for-github-actions-138g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)