Replies: 6 comments 1 reply
-
왜 내부에서는 되고 runner로는 안될까?스크립트에서 reload 하는 부분 |
Beta Was this translation helpful? Give feedback.
-
제안 -
|
Beta Was this translation helpful? Give feedback.
-
문제가 되었던 코드 : reload 코드def reload_nginx_config():
subprocess.run(
['docker', 'exec', '-it', 'nginx', 'nginx', '-s', 'reload'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE) it 플래그 사용의 문제-it 플래그는 상호작용 모드를 의미합니다. 즉, 이 플래그는 터미널에서 사용자가 명령어와 상호작용할 수 있게 해주는 옵션입니다. 예를 들어, docker exec -it는 해당 컨테이너 내에서 명령을 실행하고, 그 명령에 대한 상호작용을 사용자에게 제공합니다. 보통 쉘을 실행하거나, 명령어에 사용자 입력을 필요로 할 때 사용됩니다. 그러나, Nginx 재시작은 상호작용을 필요로 하지 않는 작업입니다. 즉, 재시작 명령을 실행한다고 해서 사용자가 터미널에서 직접 입력하거나 응답을 해야 하는 상황은 아니다. it 플러그란?-it (상호작용 모드): subprocess.run에서 docker exec 명령어에 -it 플래그를 사용하는데, 이는 상호작용 모드에서 실행할 때 사용하는 것입니다. 이 플래그는 터미널 인터페이스와 연결되어 상호작용을 가능하게 합니다. CD 시 실패할 수 있는 이유
GitHub Actions에서 -it 플래그를 사용하는 경우, 상호작용이 필요한 명령을 실행하려고 할 때 문제가 발생할 수 있습니다. GitHub Actions는 자동화된 환경에서 실행되며, 보통 터미널 입력을 요구하는 상호작용을 처리할 수 없습니다. -it은 터미널 인터페이스와 상호작용을 필요로 하기 때문에, GitHub Actions에서 이를 사용할 경우 다음과 같은 문제가 발생할 수 있습니다: 문제의 원인:-it 플래그는 상호작용(interactive) 모드와 터미널(TTY) 을 요구하는 옵션입니다. GitHub Actions에서는 상호작용을 할 수 없고, 특히 GitHub Self-hosted Runner는 기본적으로 CI/CD 파이프라인 자동화 환경이므로, 사용자 입력을 기다리거나 터미널과의 상호작용을 요구하는 명령은 제대로 실행되지 않습니다. -it 플래그를 사용하면, 터미널을 통해 명령을 실행하고 사용자와 상호작용하는 상태가 되어야 하지만, GitHub Actions 환경에서는 이를 처리할 수 없기 때문에 이로 인해 명령이 멈추거나 실패할 수 있습니다. 터미널에서 deploy.py 실행 시에는 되는 이유터미널에서 돌릴 때에는 github self-hosted runner와 다르게 우리가 터미널이 있고 상호작용이 되기 때문이다. 해결 방법-it 제거
def reload_nginx_config():
subprocess.run(
['docker', 'exec', 'nginx', 'nginx', '-s', 'reload'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE) |
Beta Was this translation helpful? Give feedback.
-
nginx reload 잘 되는지 로그 출력하는 법
출력 예시:정상적인 리로드:
리로드 실패 (잘못된 설정 파일):
리로드 실패 (권한 문제):
|
Beta Was this translation helpful? Give feedback.
-
예상 2 mount 문제호스트의 nginx.conf와 nginx 내부에서 바라보는 nginx.conf 가 다르다. |
Beta Was this translation helpful? Give feedback.
-
ro (read-only) 옵션으로 마운트하니 내부에서도 변경되었다. Bind Mount
Named Volume
|
Beta Was this translation helpful? Give feedback.
-
related Issue
#833
지금까지 파악한 문제 (팩트)
유추: Nginx reload가 되지 않는다.
Beta Was this translation helpful? Give feedback.
All reactions