Huny's Dev Blog

Github actions node20 glibc 종속성 문제 우회하기

Hun Jang
Hun JangFeb 16, 2025
Github actions node20 glibc 종속성 문제 우회하기

github actions에서 runs-on 을 ubuntu-latest로 사용하는 경우, 이러한 문제가 발생하지 않지만, container를 직접 사용하는 경우, 예를 들어 runs-on은 ubuntu-latest지만 container의 image는 centos:7과 같이 사용하는 경우 node20 glibc 상위 버전 종속성 에러가 발생한다.


actions에서는 container를 생성(create)하는 과정에서 docker 명령에 필요한 옵션을 설정한다. 이 때 필요한 실행파일들을 외부에서 container 내부에서 사용하기 위해 /home/runner 하위의 디렉터리를 container의 특정 위치에 마운트(-v 옵션) 하는데, 이때 마운트하는 디렉터리 중 하나가 /home/runner/runners/2.321.0/externals 이다. 이 디렉터리는 container의 /__e 에 마운트 되며 read-only filesystem으로 인식되므로 actions의 yml에서 run으로 해당 디렉터리를 변조하는 것은 불가능하다.

container가 정상적으로 실행되면 이후에 actions에서 추가하여 사용하는 일반적인 action 중에 하나인 checkout, upload-artifact 등은 /__e/node20/bin/node 를 사용하는데 이 때 이 node의 라이브러리 종속성 에러가 발생한다.

이를 회피 하기 위해, container/image 를 지정하고, container/volumes를 지정하여 node20/bin을 다른 디렉터리로 마운트 한다.

예) 경로를 꼭 /home/runner/work/_temp 로 지정하지 않아도 되며, 실제 존재하는 경로로 지정하면 된다. 목적은 /__e/node20/bin/node가 마운트되지 않도록 하는 것이다.

# 이상 생략

jobs:
  build:
    runs-on: ubuntu-latest
    container:
      image: centos:7
      volumes: # 강제로 node20을 사용하지 않도록 우회한다.
        - '/home/runner/work/_temp:/__e/node20/bin'

# 이하 생략
yaml

이후에는 container 내에 위치한 node로 steps의 가장 상단에 소프트 링크를 생성하도록 명령을 추가해주면, github actions에서는 해당 실행파일로 필요한 action을 실행하게 된다.

 # 이상 생략
 
    steps:
    - name: Node Version
      run: |
        node --version
        ln -sf $(which node) /__e/node20/bin/node
        /__e/node20/bin/node --version

# 이하 생략
yaml