Pipeline 설정
1. Jenkins 플러그인 설치
(1) Jenkins 관리자 패스워드 확인
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
- 브라우저에서 Jenkins 웹 UI 접속(설정한 포트 또는 기본 8080포트) 후 로그인
(2) 필수 플러그인 설치
- Jenkins 웹 UI → "Manage Jenkins" → "Manage Plugins" 로 이동 후, 다음 플러그인들을 설치
- GitLab → GitLab 웹훅 트리거 지원
- Pipeline → Jenkinsfile을 실행하는 데 필요
- Docker Pipeline → Docker와 연동하는 데 필요
- SSH Pipeline Steps → EC2에 배포할 때 필요
- Credentials Binding → Docker Hub 및 SSH 키 인증 필요
- SSH Agent → 안전하게 SSH에 접속하기 위해 필요
2. GitLab Credentials 설정
(1) GitLab의 Access Token 발급
- GitLab의 "User Settings" -> "Access tokens" -> "Add new token"
- Token name 입력
- Select scopes 선택:
api, read_repository, write_repository 선택
- "Create personal access token"
(2) Jenkins에 GitLab Access Token 등록
- Jenkins 웹 UI → "Manage Jenkins" → "Credentials" → "Domains의 (global)" → "Add Credentials"
- Kind:
Username with password
- Scope:
Global (Jenkins, nodes, items, all child items, etc)
- Username: GitLab 아이디 입력
- Password: GitLab의 Access Token 입력
- ID: Credential의 이름(ID) 지정 (ex.
gitlab-token)
- "Create"
3. Docker Hub Credentials 설정
(1) Docker Hub Access Token 생성
- Docker Hub 로그인
- "Account Settings" → "Security" → "Personal access tokens" → "Generate new token"
- Access token description: Access token 이름 입력
- Optional → Access permissions:
Read, Write, Delete 선택
- "Generate": 생성 후 복사
(2) Jenkins에서 Credentials 추가
- Jenkins 웹 UI → "Manage Jenkins" → "Domains의 (global)" → "Add Credentials"
- Kind:
Username with password
- Scope:
Global (Jenkins, nodes, items, all child items, etc)
- Username: Docker Hub 아이디 입력
- Password: Docker Hub의 Access Token 입력
- ID: Credential의 이름(ID) 지정 (ex.
dockerhub-token)
- "Create"
4. SSH 키 Credentials 설정
(1) EC2에서 SSH 키 생성
ssh-keygen -t rsa -b 4096 -C "jenkins"
- 기본값으로
/home/ubuntu/.ssh/id_rsa 저장
id_rsa → Private Key (Jenkins에서 사용)
id_rsa.pub → Public Key (EC2 서버에 등록)
(2) EC2에 Public Key 추가
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
cat ~/.ssh/id_rsa.pub → 현재 사용자의 공개 키(public key)를 출력.
>> ~/.ssh/authorized_keys → 출력된 공개 키를 ~/.ssh/authorized_keys 파일의 끝에 추가.
chmod 600 ~/.ssh/authorized_keys
chmod 600 → 해당 파일(~/.ssh/authorized_keys)의 권한을 보안 설정에 맞게 조정.
600 권한:
- 소유자(현재 사용자): 읽기(r), 쓰기(w).
- 그룹 및 다른 사용자: 접근 불가.
(3) Jenkins에 Private Key 추가
- Jenkins 웹 UI → "Manage Jenkins" → "Domains의 (global)" → "Add Credentials"
- Kind:
SSH Username with private key
- Scope:
Global (Jenkins, nodes, items, all child items, etc)
- ID: Credential의 이름(ID) 지정 (ex.
ec2-ssh-key)
- Username:
ubuntu
- Private Key → "Enter directly" -> "Add":
id_rsa 파일 내용을 복사해서 붙여넣기
- "Create"
5. .env 파일을 Credentials의 Secret File로 등록
(1) Jenkins에서 Secret File 등록
- Jenkins 웹 UI 접속 → "Manage Jenkins" → "Manage Credentials" 이동
- Domains의
(global) → "Add Credentials" 선택
- Kind:
Secret file 선택
- Scope:
Global (Jenkins, nodes, items, all child items, etc) 선택
- File:
.env 파일을 선택하여 업로드
- ID: Pipeline에서 사용할 Credential ID 설정 (ex.
env-file-content)
- "Create" 클릭하여 저장
(2) Jenkins Pipeline에서 .env 파일 사용
- Jenkins에서
.env 파일을 보안적으로 관리하기 위해 Credentials의 Secret File로 등록할 수 있습니다. 이를 통해 Jenkins Pipeline 실행 시 환경 변수 파일을 안전하게 사용할 수 있도록 구성합니다.
- 등록한
.env 파일을 Pipeline에서 사용하려면 withCredentials를 이용하여 Secret File을 읽어옵니다.
6-1. Single-Branch Pipeline 구성
(1) Single-Branch Pipeline Job 생성
- Jenkins 웹 UI → "New Item"
- Job 이름 입력 → "Pipeline" 선택 → "OK"
- Triggers:
Build when a change is pushed to GitLab. GitLab webhook URL: http://<jenkins-url>:<port>/project/<job-name> 선택
- 고급 → Secret token → "Generate" 생성 후 복사
- Pipeline → Definition →
Pipeline script from SCM 선택
- SCM:
Git 선택
- Project Repository 입력:
GitLab 프로젝트 URL 입력
- Credentials:
gitlab-token 선택
- Branch Specifier: 웹훅하고 싶은 브랜치 입력 (ex.
*/master)
- "Save"
(2) GitLab에 웹훅 추가
- GitLab 프로젝트로 이동
- "Settings" → "Webhooks" -> "Add New Webhook"
- URL 입력:
http://<jenkins-url>:<port>/project/<job-name>
- Secret token 입력: 위에서 생성한 Jenkins의 Secret token 입력
- Trigger 선택:
Push events, Merge request events 선택
- "Add webhook"
6-2. Multi-Branch Pipeline 구성
(1) Multi-Branch Pipeline Job 생성
- Jenkins 웹 UI → "New Item"
- Job 이름 입력 → "Multi-Branch Pipeline" 선택 → "OK"
- Branch Sources →
Git 선택
- Project Repository 입력:
GitLab 프로젝트 URL 입력
- Credentials 선택:
gitlab-token 선택
- Behaviours:
Discover branches
- "Save"
(2) Jenkins에서 API 토큰 생성
- Jenkins 웹 UI → "Manage Jenkins" → "Manage Users" → "admin"
- "Security" → "API Token" 생성 후 복사
(3) GitLab에 웹훅 추가
- GitLab 프로젝트로 이동
- "Settings" → "Webhooks" -> "Add New Webhook"
- URL 입력:
http://<jenkins-username>:<jenkins-api-token>@<jenkins-url>:<port>/project/<job-name>
- Trigger 선택:
Push events, Merge request events 선택
- "Add webhook"