appleboy/ssh-action를 사용하면서 겪었던 문제들과 해결방법을 작성했습니다.
Github Actions를 활용해서 Spring Server CI/CD를 구축하던 과정에서 ssh를 통해 원격서버의 쉘스크립트 (.sh)를 사용하여 서버를 부팅하려고 했는데, 이상하게 CI/CD에서 쉘스크립트를 실행하면 데이터베이스 연결에서 오류가 생겼고 컴퓨터 cmd에서 ssh 접속 후 쉘스크립트를 실행하면 멀쩡하게 작동했습니다.
이것저것 분석해본 결과, Github Actions에서 ssh 명령을 보내면 원격서버의 환경변수를 가져오지 못해서 Spring에서 오류가 발생했던 거죠.
appleboy/ssh-action가 원인이라고 생각했고, 깃허브도 찾아보고 구글링 해본 결과 해당 깃허브에서 소스코드 중 Dockerfile를 열어보니 entrypoint.sh에서 사용는 쉘이 FROM ghcr.io/appleboy/drone-ssh:1.7.4로, /bin/drone-ssh drone-ssh를 사용하여 연결하고 있었습니다.
drone-ssh가 정확히 무엇인지는 모르겠지만, 환경변수를 가져오지 못하는 건 디버깅을 통해 확실하게 알고 있으니 환경변수를 해당 쉘스크립트에서 어떻게 가져올지를 고민해야 했습니다.
방법은 간단했습니다.
환경변수를 넣어둔 쉘스크립트를 하나 만들고 필요한 곳에서 실행하여 변수를 가져오는 식으로 해결했습니다.
# env.sh
---
export 변수1=값1
export 변수2=값2
...
# start.sh
---
#!/bin/bash
soruce env.sh
nohup java -jar spring-server.jar > "logs/output.log" 2>&1 &

위의 방식으로 해결이 될 줄 알았으나, 에러와 함께 source 명령어를 찾을 수 없다고 합니다.
ChatGPT의 도움으로 source 명령어 대신 아래와 같이 작성했더니 결과적으로 잘 해결되었습니다.
# start.sh
---
#!/bin/bash
. env.sh
nohup java -jar spring-server.jar > "logs/output.log" 2>&1 &