GitHub에는 CI/CD 역할을 하는 workflow를 구성할 수 있는 actions라는 서비스가 있다. 이 것을 이용하려면 workflow를 구동할 수 있는 runner 가 필요한데(jenkins의 slave같은 역할) GitHub에서 제공하는 runner는 유료이지만, 직접 runner를 운용한다면 무료로 사용이 가능하다.
runner는 MacOS, linux, windows에서 실행이 가능하다. 맥이나 리눅스에서는 큰 문제 없이 실행되었는데 윈도우즈에서는 몇가지 문제가 발생하여, 이를 해결한 경험을 기록해둔다.
1. self-hosted runner 설치
설치는 리파지토리의 설정에 들어가면 쉽게 따라할 수 있도록 설치 스크립트를 제공해준다. 일반적인 환경이라면 순서대로 복사/붙여넣기를 반복하면 무리 없이 설치 구동이 된다. (만약, 프록시를 사용하는 환경이라면 GitHub.com에 접속할 수 있도록 프록시 설정을 해주어야 한다. 대게는 환경변수에 https_proxy를 지정해주면 된다. )
설치 스크립트는 GitHub의 리파지토리 설정에 있으며, 좌측 메뉴의 Actions > Runners 에서 우측 상단의 "New self-hosted runner" 버튼을 클릭하면 확인할 수 있다.
Powershell을 실행하고 Download 영역의 스크립트를 차례로 실행하면 다운로드 한다. (cmd 에서 실행해도 문제는 없을 것 같다)
Configure 영역의 스크립트를 실행하면, runner에 대한 이름, 레이블, 작업 폴더 등을 지정하는 설정이 진행된다
마지막 ./run.cmd를 실행하면 runner가 구동되어 "Listening for Jobs"라는 메시지가 보이면 workflow를 실행할 준비는 완료된다.
GitHub.com에서도 방금 실행한 runner 정보를 볼 수 있다.
이제 workflow 파일에, runs-on 키워드를 이용해 실행할 runner의 레이블 지정하면, 설치한 runner를 사용할 수 있다.
2. 문제 해결.
내가 겪었던 문제는 두가지였는데, 하나는 실행 권한에 관한 것이고, 두번째는 한글 출력에 대한 것이다.
1) PSSecurityException
이는 powershell 스크립트를 runner에서 수행할 권한이 없어서 발생한다. (자세한 내용은 https://learn.microsoft.com/ko-kr/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-7.4 를 참조 )
powershell을 관리자 권한으로 실행하고 아래 명령을 수행하고 runner를 재 실행한다.
$ Get-ExecutionPolicy
Restricted
$ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
2) 한글 출력.
windows는 기본 한글 인코딩이 cp949 인데, GitHub actions에서는 utf-8을 사용하므로 로그나 어노테이션에서 한글을 출력하게 되면 깨진 글자를 보게 된다.
runner가 실행되는 환경에 utf8을 사용하도록 하면 해결되는 문제인데, 다른 개발 환경에서도 utf-8 문제는 심심치 않게 겪게 되므로 윈도우즈 전체의 인코딩을 바꾸는 방법을 선택했다. 그 외에도 다양한 대안이 있을 것이다.
시스템 설정를 바꾸는 방법은 제어판에서 "날짜, 시간 또는 숫자 형식 변경"을 선택하고 관리자 옵션에서 "시스템 로캘 변경" 버튼을 눌러서 세계 언어 지원을 위해 Unicode UTF-8 사용에 체크 표시를 해주고 확인을 누른다.
이후 설정 적용을 위해 재부팅을 해주면, 위에서 발생한 한글 문제는 해결 된다.