EC2 인스턴스 내에 Docker Container 형태로 동작 중
Host와 소켓 (unix://var/run/docker.sock)으로 연결하여 Docker-out-of-Docker 방식으로 작동
Docker out of Docker(DooD)로 컨테이너 내부에서 도커 사용하기 /var/run/docker.sock 에러
필요 조건
<aside>
💡 Jenkins 컨테이너 내부 접속은 root로 접속
docker exec -it -u root jenkins /bin/bash
</aside>
호스트와 Docker 소켓 연결
컨테이너 내부에서 Docker 명령 실행을 위한 Docker CLI 설치
## Debian 기준
# jenkins 컨테이너 접속
docker exec -it -u root jenkins /bin/bash
# Add Docker's official GPG key:
apt update
apt install ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL <https://download.docker.com/linux/debian/gpg> -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] <https://download.docker.com/linux/debian> \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install docker-buildx-plugin docker-ce-cli docker-compose-plugin -y
Jenkins 내 docker 그룹 생성 후 Group ID를 호스트와 동일하게 설정
Linux: How to get group id from group name? and vice versa?
groupadd docker
groupmod -g host_docker_id docker
# 그룹 생성 후 세션 재시작 필요 (로그아웃/로그인)
usermod –aG docker jenkins
# jenkins를 docker 그룹에 추가했다면, Jenkins 재시작하여 정책 적용
jenkins 유저를 호스트에도 생성 후 docker 그룹에 추가
jenkins의 ID는 1000이므로, 호스트의 docker 그룹에 ID가 1000인 유저가 추가되어 있다면 생략 가능API 토큰은 Project / Personal Access Token 상관 없이 최소한 읽기 권한이 필요

Jenkins 설정 → System 설정 → GitLab

인증 정보는 GitLab API Token으로 설정해야함

<aside> 💡
Webhook을 사용하여 GitLab에 연동 시, 브랜치 정보를 받아오려면 수동으로 빌드를 한 번 돌려야 하는 듯…? 이유는 모름..
</aside>
GitLab 연결과 달리 API 토큰을 사용해야 하나 종류를 Username with password로 설정

유저 이름은 아무거나 해도 상관 없는듯.. (깃랩 로그인 이메일이든 임의의 아이디이든)
Pipeline 내 사용은 credentialsId 사용
pipeline {
agent any
environment {
GITLAB_PROJECT = 's11-bigdata-recom-sub1'
GITLAB_REPO = 'S11P21C106'
GITLAB_BRANCH = 'develop/BE'
GITLAB_CREDENTIAL = 'S11P21C106-Access-Token'
}
stages {
stage('Checkout') {
steps {
git branch: "${GITLAB_BRANCH}",
url: "<https://lab.ssafy.com/${GITLAB_PROJECT}/${GITLAB_REPO}.git>",
credentialsId: "${GITLAB_CREDENTIAL}"
}
}
(...)