- 사내 개발 협업을 위한 CI/CD 서버를 구축한다.
- AWS EC2 인스턴스를 사용중이다. (Ubuntu LTS)
- docker, docker-compose가 설치되어 있다.
- GitLab의 경우 추후 라이센스 구매를 위해 ce가 아닌 ee 버전으로 설치한다.
설치를 위한 Docker Compose 설정
아래는 GitLab, Jenkins를 컨테이너를 띄우기 위한 docker-compose 설정이다. GitLab 이미지는 단일 컨테이너에서 서비스를 실행하기위한 Monolithic 이미지이며 최소 시스템 요구사항은 아래와 같다.
docker-compose.yml 파일 준비
작업 디렉터리를 생성한다.
1
2
3
|
cd ~/
mkdir devops
cd devops
|
docker-compose.yml 파일을 생성한다
1
2
|
touch docker-compose.yml
vi docker-compose.yml
|
docker-compose.yml에 아래 내용을 추가한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
version: '3.0'
services:
gitlab:
container_name: gitlab
image: gitlab/gitlab-ee:latest
restart: always
hostname: "내IP:8289"
environment:
TZ: 'Asia/Seoul'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://내IP:8289'
nginx['redirect_http_to_https'] = false
nginx['listen_https'] = false
nginx['listen_port'] = 8289
gitlab_rails['gitlab_shell_ssh_port'] = 2202
ports:
- "2202:22"
- "8289:8289"
volumes:
- "/home/ubuntu/devops/gitlab/config:/etc/gitlab"
- "/home/ubuntu/devops/gitlab/logs:/var/log/gitlab"
- "/home/ubuntu/devops/gitlab/data:/var/opt/gitlab"
networks:
- votenet
jenkins:
container_name: jenkins
user: root
image: jenkins/jenkins:lts
restart: always
ports:
- "9080:8080"
environment:
- GRADLE_HOME=/home/ubuntu/devops/jenkins/libs/gradle
volumes:
- "/home/ubuntu/devops/jenkins/jenkins_home:/var/jenkins_home"
- "/home/ubuntu/devops/jenkins/script:/app/jenkins/script"
- "/home/ubuntu/devops/jenkins/source:/app/jenkins/source"
- "/home/ubuntu/devops/jenkins/ssh_key:/app/jenkins/ssh_key"
- "/home/ubuntu/devops/jenkins/libs:/app/jenkins/libs"
- "/var/run/docker.sock:/var/run/docker.sock"
networks:
- votenet
networks:
votenet:
|
Docker Compose를 사용하여 구동
docker-compose.yml을 생성한 디렉터리에서 해당 명령어를 실행한다.
1
|
$ sudo docker-compose up -d
|
아래 명령어로 구동한 도커 컨테이너를 확인할 수 있다.
1
2
3
4
|
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
72dd26a6e3c4 jenkins/jenkins:lts "/sbin/tini -- /usr/…" 15 seconds ago Up 12 seconds 50000/tcp, 0.0.0.0:9080->8080/tcp, :::9080->8080/tcp jenkins
99e8736406b5 gitlab/gitlab-ee:latest "/assets/wrapper" 15 seconds ago Up 11 seconds (health: starting) 80/tcp, 443/tcp, 0.0.0.0:8289->9980/tcp, :::8289->9980/tcp, 0.0.0.0:2202->22/tcp, :::2202->22/tcp gitlab
|
설치 확인
설치한 GitLab이 정상 동작하는지 Web으로 접속하여 확인한다. DNS 설정은 안했기 때문에 IP로 접속하게 끔 설정했다. 클라우드 서버를 사용하여 구동하기 때문에 외부에서 내가 지정한 포트로 접속이 가능하게 오픈하였다.
GitLab 설치 확인
external_url로 설정한 URL로 접속한다. 처음 접속이라면 관리자 계정의 패스워드를 변경할 수 있는 화면이 뜬다.
Jenkins 설치 확인
Jenkins 설치 후 처음 접속하게되면 Jenkins를 잠금 해제하는 화면이 뜨게 된다.
아래 명령어를 통해 초기 패스워드를 설정할 수 있다. 그 이후 프로세스를 쭉 따라 Jenkins 관리자 계정을 설정한다.
1
|
$ sudo docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
|
참고