본문 바로가기

PrivateCloud/CI CD (지속적인 통합, 배포 파이프라인 구축)

On-premise Jenkins 설치 및 Gitlab 연동하기

1. Jenkins 설치

2020.11.01 - [⭐ AWS/EC2] - MobaXterm을 활용한 SSH 접속

 

MobaXterm을 활용한 SSH 접속

1. MobaXterm 다운로드 웹페이지 접속 후 다운로드 : https://mobaxterm.mobatek.net/ MobaXterm free Xserver and tabbed SSH client for Windows The ultimate toolbox for remote computing - includes X serve..

may9noy.tistory.com

인스턴스 타입은 최소 사양인 t2.micro로 진행한다.

- 보안그룹은 아래와 같은 포트를 추가한다.

- Jenkins의 설치를 진행한다.

Ubuntu Package 에서 기본적으로 제공하는 Jenkins의 경우 이전 version의 jenkins를 제공하고 있다.
최신 버전의 Jenkins 를 설치하기 위해서는 Jenkins에서 제공하는 패키지를 설치해야 한다.

Dependencies 설치가 필요한데, 초기 AWS Instance에서 필요하다.

아래의 명령어를 통해 설치를 진행한다.

sudo apt-get update
sudo apt-get upgrade
sudo apt install ca-certificates
sudo apt install openjdk-11-jdk

- Jenkins 설치

wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt update
sudo apt install jenkins

- docker 설치

$ sudo apt-get update
 
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

apt가 HTTPS 프로토콜을 통해서 repository를 사용할 수 있도록 패키지를 설치한다.

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Docker의 공식 GPG key를 추가한다.

$ echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

apt source list에 repository를 추가한다.

$ sudo apt-get update
$ sudo apt-get install docker-ce

apt package index를 update하고 Docker를 설치한다.

- Docker 정상 설치 확인

ubuntu@ubuntu-Parallels-Virtual-Platform:~$ sudo docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

ubuntu@ubuntu-Parallels-Virtual-Platform:~$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete
Digest: sha256:61bd3cb6014296e214ff4c6407a5a7e7092dfa8eefdbbec539e133e97f63e09f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

정상적으로 Docker가 설치되고 이미지를 받아서 컨테이너를 생성할 수 있는 것을 확인할 수 있다.

2. Jenkins에서 Docker를 사용 하도록 권한부여 및 Jenkins 접속하기

- Jenkins에서 Docker를 사용하도록 권한을 부여, Jenkins 유저에게 Docker의 사용 권한을 부여한다.

sudo usermod -a -G docker jenkins
sudo chmod 777 /var/run/docker.sock

- Jenkins 서비스를 시작한다.

systemctl 로 시작하고, status를 통해서 상태를 확인합니다.

sudo systemctl start jenkins
sudo systemctl status jenkins

- OpenSSH 설치

sudo apt-get install openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh

- 방화벽 설정

아래 코드는 ssh (port 22) 그리고 8080 포트를 여는 명령어 이다.

- 만약 Jenkins 접속 포트를 변경 하고자 한다면, 아래의 내용을 참고한다.

sudo vi /etc/default/jenkins

- 서비스 포트를 기존 8080을 사용하고 있어서 9000 으로 변경했다.

HTTP_PORT=9000


AWS는 Security Group에서 설정을 진행한다.

sudo apt-get install ufw
sudo ufw enable
sudo ufw allow ssh
sudo ufw allow 8080

- Jenkins 설정 및 접속

생성한 EC2인스턴스의 퍼블릭IP:8080 으로 접근을 하면 Jenkins 메인화면이 보인다.
초기 암호는 아래에서 보이는 명령어를 복사하여 붙여넣고 진행한다.

sudo cat /var/lib/jenkins/secrets/initialAdminPassword
abcdefghijklmn379d543fc24109

이후 설치하는 방식 2가지 버튼이 있는데, 그냥 Install suggested plugins 를 누르면 대부분의 경우에서 문제없이 사용할 수 있다.

이후 AdminUser를 생성한다.

모든게 정상적으로 설치되면 아래와 같은 메인 화면을 볼 수 있다.

- Jenkins 접속 완료

3. Gitlab-Ce 설치

2022.11.03 - [프로젝트 준비/소스형상관리, 이슈 트레킹] - Gitlab CE 설치

 

Gitlab CE 설치

# Private Cloud를 위한 Gitlab CE를 설치한다. 1. Cloud9을 활용한 서버 구축 및 접속 2021.10.03 - [⭐ AWS/Cloud9] - Cloud9 생성 및 터미널 접속 Cloud9 생성 및 터미널 접속 - cloud9을 검색하여 새로운 환경을 만든

may9noy.tistory.com

2022.11.11 - [Git/Gitlab] - 온프레미스 On-premise Gitlab에 소스코드 올리기

 

온프레미스 On-premise Gitlab에 소스코드 올리기

# 온프레미스 gitlab 활용한 소스코드 저장 1. 일단 gitlab에서 생성한 프로젝트의 주소를 복사 2. intellij VCS > 버전관리통합활성화 > Git을 선택 3. Git > 원격관리 > 이름 : origin , url은 gitlab project url 입

may9noy.tistory.com

4. Jenkins 자격증명 생성과 Gitlab 연동하기

- Jenkins에서 라이브러리를 설치한다.

- Jenkins관리 > 플러그인 관리 > 설치 가능 탭으로 이동 > Gitlab을 검색하여 나오는 항목을 일단 모두 설치

- 설치된 리스트는 아래와 같다.

5. Gitlab Access Token을 할당받고 Jenkins과 연동

- Gitlab Access 토큰 할당, 상단의 검색 창에서 user setting 검색

- 왼쪽 메뉴 중 Access Tokens 클릭

- 모든 항목 체크 후 Create personal access token 클릭하여 생성

- Jenkins으로 이동하여 Credentials를 설정

Jenkins 관리 > Manage Credentials > Stores scoped to Jenkins 의 System 클릭 > Global credentials (unrestiected) > Add Credentials 클릭 > 아래와 같이 입력

6. Jenkins Pipeline 생성하기

- 새로운 item > Pipeline 클릭하여 생성

- 아래의 체크된 항목에서 Credentials > Add를 클릭하여 새로운 자격증명 생성, 나머지 체크 항목은 입력해 줘야함

- 여기서 URL은 Gitlab의 > Clone > Clone with HTTP 의 주소이다.

- 자격증명 생성 > Jenkins 클릭 > Gitlab ID / Password 입력해준다.

- 자격증명이 정상적으로 인증되면 에러없이 설정이 끝난다.

7. Gitlab에서 Webhook 설정 하여 Jenkins과 연동하기

- Gitlab > Setting > Webhooks 클릭 > 아래와 같은 화면이 나온다.

- 여기서 URL과 Secret token은 Jenkins에서 받아와야 한다.

- Push events에는 Gitlab의 브랜치 명을 넣어준다. ex) master, main

- Jenkins에서 Webhook 설정을 위한 URL과 Secret 받기

- Jenkins에서 파이프라인의 구성 으로 이동

- Build Triggers 부분을 아래와 같이 확인한다.

- 확인한 URL값과 Secret 값을 위의 Gitlab의 Webhook에 붙여넣어준다.

- 정상 연동되었는지 테스트 수행, Test > Push events를 클릭하여 정상 연결 확인

- 결과 확인

8. Jenkinsfile 생성하기

- InteliJ 에서 root 경로에 Jenkinsfile 이라는 파일을 생성한다. (아래링크 참고)

2022.11.11 - [Git/Gitlab] - 온프레미스 On-premise Gitlab에 소스코드 올리기

 

온프레미스 On-premise Gitlab에 소스코드 올리기

# 온프레미스 gitlab 활용한 소스코드 저장 1. 일단 gitlab에서 생성한 프로젝트의 주소를 복사 2. intellij VCS > 버전관리통합활성화 > Git을 선택 3. Git > 원격관리 > 이름 : origin , url은 gitlab project url 입

may9noy.tistory.com

- 아래의 내용을 입력하여 저장 후 Commit 및 Push를 수행한다.

node {
     stage('Clone repository') {
        checkout scm
     }
     
     stage('Docker Image make') {
        sh 'make build'
        sh 'echo start build docker image'
     }

     stage('Test image') {
        sh 'echo "Tests passed"'
     }

     stage('Docker deploy complete') {
        sh 'make up'
        sh 'echo deploy complete'
     }
}

9. Gitlab과 Jenkins에서 수행결과 확인하기

- Gitlab

- 정상적으로 소스코드 업로드 확인

- Jenkins 빌드 확인

- Webhook 트리거에 의해 정상적으로 동작 확인, Jenkinsfile의 내용을 수정하여 오류의 제거 필요

- 여기까지...

- 다음에는 Jenkins와 Harbor의 연동을 해보자.