Jenkins alpine 컨테이너에서 NodeJS 프로젝트 빌드하는 3가지 방법

Jenkins alpine 컨테이너에서 NodeJS 프로젝트를 빌드하려는데 오류가 생기나요? Jenkins alpine 이미지를 활용해서 Jenkins를 구동하지 말아야 하는 이유를 설명해 드립니다.

Jenkins alpine 이미지 사용 비추천

결론부터 일단 말씀드리면, Jenkins를 Docker로 띄워서 사용할 것이고, NodeJS 프로젝트를 빌드할 계획이라면 Alpine Jenkins 도커 이미지를 사용하지 마시길 권합니다.

이유: musl-libc 이슈

alpine은 경량 musl-libc 라이브러리를 사용하는데, Jenkins의 NodeJS 플러그인은 glibc로 컴파일 되어 있다고 합니다. 굳이 alpine 이미지를 사용해야 한다면 플러그인 소스 코드를 구해서 musl-libc로 컴파일하고 설치하면 될 수도 있겠지만, 매우 귀찮은 작업이 될 수 있습니다.

저의 경우는 NVM Wrapper 플러그인과 NodeJS 플러그인을 모두 Jenkins에 설치해서 시도해 봤는데, 플러그인 설치와 설정까지는 정상적으로 되는데, 결정적으로 실행이 안 됩니다. node 명령어를 실행하면, Not Found를 외치며 실행되지 않습니다.

심지어 node 파일이 있는 디렉토리까지 찾아가서 ./node를 입력해 보았지만 찾을 수 없다고 합니다. 정말 황당했지만, 어쩌겠습니까.

해결책

Debian 기반의 Jenkins 이미지 활용: 추천

아래와 같이 Debian 기반의 도커 이미지로 Jenkins를 사용하면 아무 문제 없이 해당 플러그인을 사용할 수 있습니다.

docker pull jenkins/jenkins:lts-jdk11
ShellScript

Alpine에 Glibc를 설치

Alpine 리눅스에 gblic를 설치하는 것이 하나의 방법이긴 하지만, 이미지 재구성이 필요하고 Alpine을 사용하는 이유가 사라지게 됩니다. 그럴 바에야 차라리 Debian 이미지를 사용하는 편이 더 나아 보입니다.

Alpine에서 플러그인 소스 컴파일

플러그인 소스 코드를 다운 받아서 musl-libc 기반으로 컴파일을 새로 한 후 수동 설치하는 방법입니다. 이와 같은 문제가 생기는 플러그인들을 모두 일일히 컴파일 하는 건 꽤 고단한 작업이 될 수 있습니다. 서버 자원이 너무 부족해서 꼭 alpine linux를 사용해야 하는 경우가 아니라면, Jenkins 구동은 Debian 이미지 사용하시길 권합니다.

관련 링크

참고했던 자료를 아래에 링크 걸어놓았습니다. Stackoverflow의 “Nodejs with jenkins plugin not executable in alpine image and displays “symbol not found” 답글 달아주신 valiano님 고맙습니다.

같이 읽으면 좋은 글

도커 이미지 파일 save(export) 및 load(import) 방법(Docker Image File)

특정 도커 이미지를 제작한 이후 해당 도커 이미지를 파일로 저장할 필요가 생길 때가 있습니다. 그리고 추출한 파일을 도커 이미지로 불러들여야 하는 경우가 있습니다. 도커 이미지 파일로 저장하고, 추출한 파일을 도커 이미지로 읽어들이는 방법을 공유합니다.

도커 이미지 파일로 저장

도커 이미지를 파일로 추출하는 방법입니다. 명령어 한 줄이면 간단히 해결됩니다. -o 옵션은 어떤 파일로 저장할 것인지 설정하는 옵션입니다. 이미지명의 경우 태깅까지 모두 포함해서 정확히 작성해 주셔야 합니다.

docker save -o 저장하기원하는파일명 이미지명
ShellScript

도커 이미지 파일을 로드

위에서 추출한 도커 이미지 파일을 로드하는 방법 역시 간단합니다.

docker load -i 파일명
ShellScript

도커 이미지 확인

다들 아시는 docker images 명령어 한 줄이면 이미지가 제대로 로드되었는지 확인할 수 있습니다.

docker images
ShellScript

관련 링크

docker save 문서docker load 문서를 통해서 자세한 내용 확인할 수 있습니다.

같이 읽으면 좋은 글

docker sudo 없이 실행하기

docker engine을 설치하고 나서, docker 명령을 사용하려면 sudo를 매번 붙여줘야 하는 번거로움이 있습니다. docker 명령어를 sudo 없이 사용하는 방법 확인해 보겠습니다.

docker sudo 없이 실행하려면

현 사용자를 docker 그룹의 사용자로 추가해주면 문제는 해결된다.

sudo gpasswd -a $USER docker
ShellScript

이제 로그아웃 후 다시 로그인하거나, 재부팅 하고 나면 sudo 없이 docker 명령어를 실행할 수 있다.

관련 자료

도커 설치 후 과정에 대한 문서를 확인하면 도움이 됩니다.

같이 읽으면 좋은 글