CICD 서버 구성하기(VPC구성, Jenkins 설치)

이정훈·2023년 7월 3일
0

CI/CD

목록 보기
5/11
post-thumbnail

1. VPC 구성

CICD_VPC 192.16.0.0/16

Public_Jenkins_Master 192.168.10.0/24

Private_Jenkins_Slave01 192.168.20.0/24

Private_Jenkins_Slave02 192.168.30.0/24

CICD_NAT_Gateway

CICD_Internet_Gateway

연결되도록 설정!

2. Jenkins

  • Jenkins_Master에 SSH 접속해 준다.

Java 설치

  • Jenkins는 Java 응용 프로그램이며 시스템에 Java 8 이상을 설치해줘야 한다. Java Platform의 오픈 소스 구현인 OpenJDK 11을 설치
sudo apt update
sudo apt install openjdk-11-jdk -y
  • 설치 완료후 Java 버전을 확인!
java -version
# openjdk version "11.0.19" 2023-04-18
# OpenJDK Runtime Environment (build 11.0.19+7-post-Ubuntu-0ubuntu120.04.1)
# OpenJDK 64-Bit Server VM (build 11.0.19+7-post-Ubuntu-0ubuntu120.04.1, mixed mode, sharin

Jenkins 설치

  • ubuntu에 Jenkins를 설치하는 것은 간단하다! Jenkins APT 저장소를 사용하도록 설정 → 저장소 GPG 키를 가져오고 → Jenkins 패키지를 설치
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
# ok
  • Jenkins 리포지터리 시스템을 추가
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
  • Jenkins 레포지토리를 사용하도록 apt를 업데이트 해준다.
sudo apt update
  • 업데이트 시 아래와 같은 오류가 나오면
W: GPG error: https://pkg.jenkins.io/debian-stable binary/ Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 5BA31D57EF5975CAW: GPG error: https://pkg.jenkins.io/debian-stable binary/ Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 5BA31D57EF5975CA
E: The repository 'http://pkg.jenkins.io/debian-stable binary/ Release' is not signed.
  • 아래 명령어를 사용하여 키를 가져온다.
  • 이때, 가져오는 키는 위에 적혀있는 것으로 가져와야한다.
  • 그리고 다시 업데이트를 해줘야한다!
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5BA31D57EF5975CA
# Executing: /tmp/apt-key-gpghome.obHBHgi1Ox/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys 5BA31D57EF5975CA
# gpg: key 5BA31D57EF5975CA: public key "Jenkins Project <jenkinsci-board@googlegroups.com>" imported
# gpg: Total number processed: 1
# gpg:               imported: 1
sudo apt update
  • Jenkins를 설치 해준다.
sudo apt install jenkins -y
  • Jenkins가 실행되어 있는지 확인
systemctl status jenkins
# jenkins.service - Jenkins Continuous Integration Server
# Loaded: loaded (/lib/systemd/system/jenkins.service; enabled; vendor preset: enabled)
# Active: active (running) since Mon 2023-06-26 02:29:40 UTC; 43s ago
# ...
  • 시스템의 설정을 변경한 후, 변경사항을 적용하기 위해 실행해야한다.
sudo systemctl daemon-reload
  • EC2에 설치 하였고 jenkins로 접속하기 위해 인바운드 규칙에서 3333을 열어줘야 한다.

Untitled

  • Master, Slave01, Slave02를 사용해야 하기 때문에 번호를 각각 3333, 4444, 5555로 설정할 예정이다.
  • Private 서브넷 Jenkins 대쉬보드에 접근하기위해 설정해 주자 미리!
sudo vi /usr/lib/systemd/system/jenkins.service

Environment="JENKINS_PORT=8080" # 기존
Environment="JENKINS_PORT=3333" # 변경

포트번호를 변경해주면 된다. 하지만 EC2에 설치가 되어있기 때문에
인바운드 규칙도 같이 수정해줘야한다!

sudo systemctl restart jenkins
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
# 8bfe862d86704e8ba2363fdf655a6fa6

  • 로그인 후 Install suggested plugins 를 해주자!

  • 잘 설치되고

  • 설치가 완료되면 계정을 생성해줘야한다.

  • 인스턴스 url 입력창은 나오는 것 그대로 사용!

  • 위와 같은 방법으로 Private 서브넷에도 Jenkins_Slave01를 설치해준다.
  • Jenkin_Master가 설치되어 있는 서버를 bastion 서버로 사용하여 각 Slave01과 Slave02에 들어가 설치해준다.
  • 이 때, bastion 서버에 pem 키를 넣어줘야한다! 그리고 권한을 변경해 줘야한다. (나는 키이름 Jenkins라고 만들었다.)
chmod 600 Jenkis.pem

Jenkins_Slave 대쉬보드 접근

  • 이 부분은 굳이 하지 않아도 된다! 왜냐면 마스터에서 컨트롤하니깐 설치만 잘 되어있으면 okay!
  • Jenkins_Slave들의 경우 Private 서브넷에 만들어져 있기 떄문에 외부에서 접근을 할 수 가 없다.
  • 그래서 SSH 터널링을 사용하여 접근하려고 한다.
  • 먼저 위에 포트번호 수정하는 곳에서 수정해 주도록 하자!
  • Slave01 → 4444 / Slave02 → 5555
  • Slave가 사용하는 보안규칙에도 4444, 5555도 열어주자!

  • SSH 터널링을 위해 아래 명령어를 실행해 준다.
ssh -i Jenkins.pem -L 4444:[Private IP]:4444 ubuntu@[Public IP]
  • 우린 이제 [로컬 IP:3333] 으로 들어가게되면 bastion서버를 통해 Private Jenkins의 대쉬보드를 접근할 수 있다!
  • 주의 할점은 터널링을 켜준 것들은 끄면 안된다!
  • Slave02 도 접속을 위해 창을 하나 더 키고
ssh -i Jenkins.pem -L 5555:[Private IP]:5555 ubuntu@[Public IP]
  • 각 포트번호로 접속 할 수 있다!
http://127.0.0.1:4444/
http://127.0.0.1:5555/
  • 이 명령어는 로컬 컴퓨터에서 SSH 터널을 사용하여 원격 컴퓨터와 특정 포트를 연결하는데 사용
  • ssh -i Jenkins.pem: SSH에 사용할 키 파일(Jenkins.pem)을 선택하여 원격 컴퓨터에 연결하는 옵션
  • -L 5555:[Private IP]:5555: 로컬 컴퓨터의 포트 5555에서 시작되는 터널을 만들어 원격 컴퓨터의 [Private IP]와 포트 5555로 연결하겠다는 의미다. 이렇게 설정하면 로컬 컴퓨터의 포트 5555로 들어오는 트래픽이 원격 컴퓨터의 [Private IP]와 포트 5555로 전달
  • ubuntu@[Public IP]: 원격 컴퓨터에 연결할 사용자 이름(ubuntu)과 퍼블릭 IP 주소([Public IP])를 입력합니다.
  • 이 명령어로 올바른 키 파일과 IP 주소를 사용하면 로컬 컴퓨터와 원격 컴퓨터를 특정 포트로 연결할 수 있습니다. 이렇게 하면 외부에서 허용되지 않는 포트나 특정 서비스에 대해 안전하게 액세스할 수 있습니다.
profile
싱숭생숭늉

0개의 댓글