7 분 소요

서버를 배포하던 중, AWS 프리티어의 사양이 부족해 원활하게 수행되지 않는 문제가 발생했다.
같은 문제가 발생했다는 도 발견했다.
따라서 GCP를 이용해보려고 한다.
구글 클라우드에 가입하는 법은 이 글을 참고하자.
스크린샷 2022-10-12 오후 7 24 55

참고🌟
미리 말하자면, spring boot 앱을 배포하기 위해서 총 두 개의 인스턴스를 만들 예정이다.
하나는 instance-1이라는 이름의 배포할 spring boot 프로젝트 용 인스턴스이고,
다른 하나는 instance-jenkins라는 이름의 jenkin 용 인스턴스이다.

이 글에서는 두 개의 인스턴스 생성 후 instance-jenkins에 jenkins를 설치해보는 것까지 다룬다.
(매우 긴 Trouble Shooting 과정이 나올 예정이다..😱)

1. 리눅스 인스턴스 생성하기

전체적으로 이 글을 참고했으며, 무료 버전과 관련해서는 이 글을 참고했다.

  • 리전: 사우스캐롤라이나(us-east1)
  • 부팅 디스크
    - 운영체제: Ubuntu
    - 버전: Ubuntu 20.04 LTS
    - 부팅 디스크 유형: 표준 영구 디스크
    - 크기: 30
  • 방화벽
    - HTTP 트래픽 허용
    - HTTPS 트래픽 허용

스크린샷 2022-10-12 오후 7 32 52

스크린샷 2022-10-12 오후 7 44 00

스크린샷 2022-10-12 오후 7 31 06

생성 완료

스크린샷 2022-10-12 오후 7 50 48

“브라우저 창에서 열기”를 클릭하면 바로 ssh 접속을 할 수 있다.

참고
무료 서버이기 때문에 과금의 우려는 없지만,
아래 블로그에 혹시나 과금이 발생했을 경우 메일로 알림을 받을 수 있도록 설정하는 방법이 나와있다.
필요한 경우에 참고하자!
https://wildeveloperetrain.tistory.com/154

1) 외부 IP 고정

  1. 생성된 인스턴스에서 맨 오른쪽 점 세 개를 클릭한 뒤, [네트워크 세부정보 보기]를 클릭한다.
    스크린샷 2022-10-12 오후 9 27 37

  2. [IP 주소 > 외부 IP 주소 > 외부 고정 주소 예약]을 클릭한다.
    스크린샷 2022-10-12 오후 9 28 09

  3. 아래와 같이 연결 대상에 방금 만든 인스턴스를 지정한 뒤 [예약]을 클릭힌다.
    스크린샷 2022-10-12 오후 9 30 04

2) 방화벽

이 글을 참고했다.

포트를 열어주어야 한다
스크린샷 2022-10-12 오후 10 22 14
위에 사진처럼 방화벽 규칙을 만든다.

그리고 방금 만든 인스턴스에 적용까지 해주어야 한다!
스크린샷 2022-10-12 오후 10 25 23

이제 [유사하게 만들기]를 통해 jenkins 용 인스턴스를 하나 더 만들자.
스크린샷 2022-10-12 오후 10 38 57
그리고 이전처럼 고정 IP와 방화벽 설정까지 해준다. (“비슷하게 만들기”로 생성하면 방화벽은 저절로 설정되어 있을 것이다.)

2. instance-jenkins

1) 메타데이터 ssh 접근 설정

이 글을 참고했다.

jenkins와 web이 소통할 수 있도록 ssh public key를 설정하는 과정이다.
instance-jenkins에 SSH 접속한 뒤, 아래 커맨드를 실행하자.

# ssh-keygen을 통해 public/private key 생성
$ ssh-keygen -t rsa # 엔터 세 번 입력

# 복사를 위해 publickey 출력
$ cat .ssh/id_rsa.pub # 출력 값을 복사하자.

스크린샷 2022-10-12 오후 10 45 43

이제 GCP로 돌아와, 아래 사진에 보이는 [메타데이터 > SSH 키 > SSH 키 추가]를 클릭하자.
스크린샷 2022-10-12 오후 10 48 23
그리고 아까 복사한 값을 붙여넣고, 키를 추가한다.
스크린샷 2022-10-12 오후 10 53 47
publickey를 메타데이터에 등록하면 모든 인스턴스에 publickey가 공유되어 인스턴스끼리 접근이 가능해진다.

그럼 이제 instance-1에 접근해보자.

# 형식: ssh -i [instance name] [내부 ip]
$ ssh -i instance-1 10.178.0.3

스크린샷 2022-10-12 오후 10 56 55
이후 유저를 보면, instance-1으로 전환되는 것을 확인할 수 있다.
exit 명령어를 입력하면 다시 instance-jenkins로 돌아온다.

2) jenkins 설치 및 구동

instance-jenkins에서 아래 커맨드를 실행하자.

# jenkins 구동을 위한 jdk 설치
$ sudo apt-get install openjdk-11-jdk -y

# repository key 설정
$ wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -

# repository 목록 갱신
$ sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'

$ sudo apt-get update

# 젠킨스 설치
$ sudo apt-get install jenkins -y

Trouble Shooting 🔥

맨 마지막에 젠킨스를 설치할 때 다음과 같은 에러가 발생했다.
스크린샷 2022-10-12 오후 11 15 38

시도 1) 포트 변경

아래 커맨드로 포트 번호를 8080에서 9090으로 변경했다.

$ sudo vi /etc/init.d/jenkins
$ sudo vi /etc/default/jenkins

아직 해결되지 않았다..
우선 바꾼 포트 번호는 그대로 두었다.

시도 2) PATH 추가

이번에는 java 경로를 추가해보자.
먼저, 아래 커맨드를 통해 java 경로를 확인하자.

$ update-alternatives --list java
# 출력: /usr/lib/jvm/java-11-openjdk-amd64/bin/java

이제 아래 커맨드로 파일을 수정하자.
(readonly 파일이라 sudo 권한으로 수정해야한다.)

$ sudo vi /etc/init.d/jenkins

스크린샷 2022-10-12 오후 11 29 35

PATH=/usr/lib/jvm/java-11-openjdk-amd64/bin:/bin:/usr/bin:/sbin:/usr/sbin:

시도 3) java 버전 변경: 11 -> 8

그대로 에러가 계속 발생해서 이번에는 java의 버전을 11에서 8로 바꿔보았다.

# 기존 java 제거
$ sudo apt-get purge openjdk*

# 삭제 확인
$ java -version

# java8 설치
$ sudo apt-get install openjdk-8-jdk -y

# 버전 확인
$ java -version

스크린샷 2022-10-12 오후 11 55 57
이제 아까 java 경로에서 11을 8로 바꿔주자.

PATH=/usr/lib/jvm/java-8-openjdk-amd64/bin:/bin:/usr/bin:/sbin:/usr/sbin:

그래도 안된다…

시도 4) 또 포트 변경

구글링 하던 중, 포트 번호를 한 군데 더 바꿔야한다는 글이 있었다.

$ sudo vi /lib/systemd/system/jenkins.service

역시 기존 8080에서 9090으로 바꿨다.
그래도 안된다…

시도 5) java 버전 변경: 8 -> 11

다시 java 버전을 11로 변경하고 path도 변경했다ㅠ

$ sudo apt remove openjdk-8-jdk

# 기본 자바를 openjdk-11로 설정
$ sudo update-java-alternatives --set java-11-openjdk-amd64

시도 6) 환경변수 설정

echo $JAVA_HOME 커맨드를 입력해봤더니, 환경변수 설정이 안되어있길래, 이번에는 환경변수 설정을 해보자
스크린샷 2022-10-13 오전 12 25 32

먼저, 아래 커맨드를 통해 java 경로를 확인하자.
출력되는 경로에서 맨 마지막 /bin/java를 제외하고 복사하자.

$ update-alternatives --list java
# 출력: /usr/lib/jvm/java-11-openjdk-amd64/bin/java

$ sudo vi /etc/environment
# 추가: JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"

# 변경 사항 적용
$ source /etc/environment

# 변경 확인
$ echo $JAVA_HOME

스크린샷 2022-10-13 오전 12 29 30

스크린샷 2022-10-13 오전 12 30 30

또 안된다..ㅜㅜ

시도 7) 처음부터 다시

# 젠킨스 저장소 키 설정
$ wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -

# 젠킨스 저장소 목록 갱신
$ sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list'

# 설치목록 최신 갱신
$ sudo apt-get update

# Java Install 
# $ sudo apt-get install openjdk-11-jdk # 이거는 빼고 했다.

# Jenkins Install
$ sudo apt-get install jenkins

스크린샷 2022-10-13 오전 12 42 15
이런 식으로 나왔는데, 기동이 되지 않아 상태를 확인해봤더니 아래와 같았다.
스크린샷 2022-10-13 오전 12 51 50
초기 비밀번호(initialAdminPassword)는 생성되었는데 기동이 되지 않는다..

설치를 다시 해보니 처음과 같은 에러가 발생한다..
스크린샷 2022-10-13 오전 12 55 49

시도 8) PATH 삭제

예전에는 PATH를 추가하지 않아도 됐었던 같아서 주석처리 해보았다.
시도2를 보고 하자.

스크린샷 2022-10-13 오전 1 06 37
이런 에러가 발생해 다시 주석을 해제했다.

시도 9) 이미지를 바꿔 jenkins 인스턴스 다시 생성 -> 성공 👍

이 글을 참고했다.

기존에는 Ubuntu 20.04 LTS 였는데, Centos 7로 다시 만들었다.
스크린샷 2022-10-13 오후 6 29 28

이번에는 ubuntu가 아니라 centos 이기때문에 커맨드가 약간 달라진다.

# jdk 설치 및 설정
$ sudo yum list java-1.8.0-openjdk-devel*
$ sudo yum install java-1.8.0-openjdk-devel.x86_64

# 설치된 경로와 버전 확인
$ which javac /usr/bin/javac
$ readlink -f /usr/bin/javac /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64/bin/javac

# JAVA_HOME 구성
$ sudo vi /etc/profile
# 맨 하단에 아래 명령어 추가
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64 PATH=$PATH:$JAVA_HOME/bin export PATH

# 변경사항 적용
$ source /etc/profile

# 버전 확인
$ echo $JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64
# 출력: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64

# wget 설치
$ sudo yum install wget -y

# MAVEN_HOME 구성
$ sudo vim /etc/profile
# 맨 하단에 아래 명령어 추가
export MAVEN_HOME=/usr/local/apple/Tools/apache-maven-3.6.3 PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin export PATH

# 변경사항 적용
source /etc/profile

# 버전 확인
$ echo $MAVEN_HOME /usr/local/apple/Tools/apache-maven-3.6.3

# git 설치
sudo yum install git

# yum repository 사용을 위해 public key를 등록
$ sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo 
$ sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

# jenkins 설치
$ sudo yum install jenkins

이제 방화벽 설정을 하자.

포트를 변경하자. (8080 -> 9090)

$ sudo vi /etc/sysconfig/jenkins # JENKINS_PORT="9090"
$ sudo vi /lib/systemd/system/jenkins.service # Environment="JENKINS_PORT=9090"

# 방화벽 설정
$ sudo firewall-cmd --permanent --zone=public --add-port=9090/tcp
$ sudo firewall-cmd --reload

# jenkins 시작
$ sudo service jenkins start systemctl enable jenkins

# $ sudo systemctl daemon-reload
# $ sudo systemctl start jenkins
# $ sudo systemctl enable jenkins

스크린샷 2022-10-13 오후 6 58 06

에러 발생..
스크린샷 2022-10-13 오후 7 18 34

시도 1) java 경로 추가

$ sudo vi /etc/init.d/jenkins
# 아래 path 추가
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64

스크린샷 2022-10-13 오후 7 25 35
맨 아래 추가했다.
그러나 실패했다.

시도 2) java installation folder에 권한 부여

$ cd /usr/lib
$ sudo chmod 755 jvm

# 홈으로 이동
$ cd
$ sudo systemctl start jenkins

이번에도 실패했다.

시도 3) java 다른 버전 설치 (8 -> 11)

# 설치할 수 있는 버전 확인
$ sudo yum list java-11-openjdk

# 설치
$ sudo yum install java-11-openjdk.x86_64

# 기본 자바 선택
$ sudo update-alternatives --config java

스크린샷 2022-10-13 오후 7 54 54
설치된 경로는 아래와 같다.

/usr/lib/jvm/java-11-openjdk-11.0.16.1.1-1.el7_9.x86_64/bin/java

이제 JAVA_HOME을 설정하자.

# JAVA_HOME 구성
$ sudo vi /etc/profile
# 맨 하단에 JAVA_HOME을 아래 커맨드로 변경
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.16.1.1-1.el7_9.x86_64 PATH=$PATH:$JAVA_HOME/bin export PATH

# 변경사항 적용
$ source /etc/profile

# path 추가
$ sudo vi /etc/init.d/jenkins
# 아래 두 개 path 추가
/usr/lib/jvm/java-11-openjdk-11.0.16.1.1-1.el7_9.x86_64
/usr/lib/jvm/java-11-openjdk-11.0.16.1.1-1.el7_9.x86_64/bin/java

# jenkins 시작
$ sudo service jenkins start systemctl enable jenkins

드디어 성공했다!!!
스크린샷 2022-10-13 오후 8 09 15

jenkins 설치 및 구동 성공 과정

마침내 jenkins 구동에 성공했다…
나중을 위해 한 일들을 정리해보자.

  • centos 7 인스터스 생성
  • 외부 고정 IP 할당
  • openjdk-11 설치 및 기본 자바로 설정
  • JAVA_HOME
  • /etc/init.d/jenkins에 java path 추가
  • wget 설치
  • MAVEN_HOME
  • git 설치
  • public key 등록
  • jenkins 설치
  • (gcp 홈에서) 9090 포트 열기
  • /etc/sysconfig/jenkins, /lib/systemd/system/jenkins.service 9090으로 포트 변경
  • 방화벽 설정
  • jenkins 구동
# jdk 설치할 수 있는 버전 확인
$ sudo yum list java-11-openjdk

# jdk 설치
$ sudo yum install java-11-openjdk.x86_64

# 기본 자바 선택
$ sudo update-alternatives --config java

# JAVA_HOME 구성
$ sudo vi /etc/profile
# 맨 하단에 아래 명령어 추가
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.16.1.1-1.el7_9.x86_64 PATH=$PATH:$JAVA_HOME/bin export PATH

# 변경사항 적용
$ source /etc/profile

# path 추가
$ sudo vi /etc/init.d/jenkins
# 아래 두 개 path 추가
/usr/lib/jvm/java-11-openjdk-11.0.16.1.1-1.el7_9.x86_64
/usr/lib/jvm/java-11-openjdk-11.0.16.1.1-1.el7_9.x86_64/bin/java

# wget 설치
$ sudo yum install wget -y

# MAVEN_HOME 구성
$ sudo vim /etc/profile
# 맨 하단에 아래 명령어 추가
export MAVEN_HOME=/usr/local/apple/Tools/apache-maven-3.6.3 PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin export PATH

# 변경사항 적용
source /etc/profile

# git 설치
sudo yum install git

# yum repository 사용을 위해 public key를 등록
$ sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo 
$ sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

# jenkins 설치
$ sudo yum install jenkins

### gcp 홈에 나가서 방화벽 9090 포트 열기 ###

$ sudo vi /etc/sysconfig/jenkins # JENKINS_PORT="9090"
$ sudo vi /lib/systemd/system/jenkins.service # Environment="JENKINS_PORT=9090"

# 방화벽 설정
$ sudo firewall-cmd --permanent --zone=public --add-port=9090/tcp
$ sudo firewall-cmd --reload

# jenkins 시작
$ sudo service jenkins start systemctl enable jenkins
# 만약에 시작이 안된다면...
$ sudo chmod 755 /usr/lib/jvm

3) jenkins 웹 브라우저 접속

접속 주소는 http://[jenkins 인스턴스 외부 IP]:9090이다.
스크린샷 2022-10-13 오후 8 05 40

이제 위 사진에 나온 경로에서 password를 알아내자.

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

스크린샷 2022-10-13 오후 8 10 51

비밀번호를 입력한 뒤에는, 나오는 순서대로 정보를 입력하면 된다.
스크린샷 2022-10-13 오후 8 16 27

아래 URL은 변경 없이 다음으로 넘어가면 된다.
스크린샷 2022-10-13 오후 8 16 47

스크린샷 2022-10-13 오후 8 17 01

아래처럼 나오면 설정을 마친 것이다!
스크린샷 2022-10-13 오후 8 37 11



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기

태그:

카테고리:

업데이트: