WARNING설명하는 메뉴나 과정은 설치된 버전에 따라 다를 수 있습니다.
이번 포스팅에서는 Astro 블로그를 빌드(Build)해서 배포(Deploy) 하는 과정을 기록합니다.
Jenkins와 연동하기 위해 먼저 Gitea(Self-hosted Git 서비스) 컨테이너를 실행했습니다.
$ docker run -d -v /home/$USER/gitea:/data -p 3000:3000 -p 22:22 --restart=always --network bridge_static --ip 172.18.0.10 --name gitea gitea/gitea
Dockerfile을 작성하여 Jenkins 기본 이미지에 Node.js를 설치합니다.
FROM jenkins/jenkins:lts
USER root
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
&& apt-get install -y nodejs
RUN npm i -g pnpm
USER jenkins
적절한 위치에 nano(또는 vim) 에디터를 사용해 Dockerfile을 작성한 후, 이미지를 빌드하고 컨테이너를 실행합니다.
$ docker build -t custom-jenkins .
$ sudo docker run -d --name jenkins -p 8080:8080 --restart=always --network bridge_static --ip 172.18.0.11 -v /var/run/docker.sock:/var/run/docker.sock -v /home/$USER/jenkins:/var/jenkins_home -u root custom-jenkins
Jenkins는 기본적으로 8080 포트를 통해 접속하며, 최초 접속 시 설치를 계속하려면 initialAdminPassword를 입력해야 합니다.
$ docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
Gitea에서는 아래 순서로 Personal Access Token을 발급할 수 있습니다:
우측 상단 메뉴 → Settings → Applications → Manage Access Tokens → Generate Token
Jenkins의 ‘Manage Jenkins → Plugins → Available plugins’ 메뉴에서 아래 플러그인들을 검색해 설치합니다:
- Environment Injector
- Gitea
이후, ‘Manage Jenkins → Credentials → System → Global credentials (unrestricted) → Add Credentials’ 메뉴로 이동하여 자격 증명을 추가합니다.
‘Kind’ 항목에서 [Gitea Personal Access Token]을 선택하고, Gitea에서 발급받은 토큰을 입력합니다.
artifact.js 파일에는 빌드된 파일들을 .zip 형식으로 압축하는 로직을 구현하였고, publish.js 파일에는 해당 압축 파일을 Netlify API를 통해 배포하는 로직을 작성하였습니다.
package.json의 scripts에 artifact.js와 publish.js를 각각 호출하는 스크립트를 작성해 두었습니다.
Jenkins 에서 Freestyle project 을 선택합니다
소스코드 관리에서 Repository 주소를 입력합니다. Jenkins도 컨테이너로 실행했기 때문에 Gitea 컨테이너의 내부 IP를 입력해야 합니다.
Inject environment variables to the build process 옵션을 선택해 Netlify API에서 사용할 환경 변수를 설정합니다.
NETLIFY_SITE_ID={NETLIFY_SITE_ID}
NETLIFY_AUTH_TOKEN={NETLIFY_AUTH_TOKEN}
Execute shell 에는 다음과 같이 작성했습니다.
npx pnpm install
npx pnpm build
npm run artifact
npm run publish
설정을 완료하고 ‘지금 빌드’ 를 실행해보면 정상적으로 배포됩니다.