EC2 + Jenkins를 이용해 CI/CD 구축하기
0. 로컬(mac)에서 jenkins 설치
1) Jenkins 설치
brew를 통해 젠킨스를 설치한다.
$ brew install jenkins
젠킨스를 설치한다음 아래의 명령어로 젠킨스를 제어할 수 있다. start 명령어를 통해 젠킨스를 실행한다.
$ brew services start jenkins // 젠킨스 시작
$ brew services stop jenkins // 젠킨스 종료
$ brew services restart jenkins //젠킨스 재시작
젠킨스(어드민화면) 포털 설정
젠킨스를 시작한 뒤에 localhost:8080
에 접속하면, 아래와 같이 나온다.
Administrator password를 입력하면 되는데,
패스워드는 위 사진에 나와있는 경로에 있는 파일을 열어서 복사 후 입력하면 된다.
$ cat /Users/minju/.jenkins/secrets/initialAdminPassword
플러그인 설치 화면
패스워드를 입력 후 아래와 같이 플러그인 설치화면이 나오는데 특별히 설치할 플러그인이 필요없다면 install suggested plugins를 선택한다.
그럼 아래처럼 Getting Started 페이지가 나올 것이다. 잠시 기다리자.
Admin 계정 생성
기다리면 이렇게 Admin 사용자를 생성하는 페이지가 나오는데, Admin 사용자를 생성하고 다음 화면을 누르면 Jenkins 화면이 보이는 것을 확인할 수 있다.
Instance Configuration
마지막으로 젠킨스의 TCP 포트를 앞으로도 계속 같은 포트를 쓸 것인지 물어본다.
나는 9090으로 변경했다.
끝
이제 설정이 끝났다. Start using Jenkins를 누르자.
그럼 아래와 같은 대시보드가 나온다.
2) 외부 IP로 접근 가능하도록 설정
해당 Mac 호스트를 CI 전용 서버로 쓰는 경우 localhost:8080 이외의 도메인이나 공인IP, 외부 IP로 접속하기를 원할 수 있다.
이럴경우 /usr/local/opt/jenkins/homebrew.mxcl.jenkins.plist
파일 –httpListenAddress 값을
127.0.0.1에서 아래와 같이 0.0.0.0으로 변경해야한다. 그래야 공인IP또는 사설 IP로 접근 가능하다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>homebrew.mxcl.jenkins</string>
<key>ProgramArguments</key>
<array>
<string>/usr/libexec/java_home</string>
<string>-v</string>
<string>1.8</string>
<string>--exec</string>
<string>java</string>
<string>-Dmail.smtp.starttls.enable=true</string>
<string>-jar</string>
<string>/usr/local/opt/jenkins/libexec/jenkins.war</string>
<string>--httpListenAddress=0.0.0.0</string>
<string>--httpPort=8888</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
===================
1. EC2 ubuntu에서 jenkins 설치
jenkins 설치
# 젠킨스 저장소 키 설정
$ 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-8-jdk
# Jenkins Install
$ sudo apt-get install jenkins
java 설치는 java11이 이미 설치되어 있어 하지 않았는데, jenkins 설치에서 에러가 발생했다.. java8을 다시 설치했다.
에러 발생
jenkin를 설치할 때 아래와 같은 에러가 발생했다..
기본 자바 버전이 java 11로 설정되어 있었는데 이를 java 8로 바꾸었다.
# java 버전 변경
$ sudo update-alternatives --config java
# javac 버전 변경
$ sudo update-alternatives --config javac
다른 에러 발생
버전을 변경하니 이번에는 또 다른 에러가 발생했다..
이번에는 포트번호(HTTP_PORT
)를 8080에서 9090으로 바꿔봤다.
$ sudo vi /etc/init.d/jenkins
$ sudo vi /etc/default/jenkins
해결되지 않아서 다시 원래대로 바꿨다.
성공!!!
여기서 jenkins가 openjdk-11에서 작동한다고 해서, java와 javac 버전을 다시 11로 바꿨다.
그리고 포트 번호를 다시 9090으로 바꾸니 성공했다!!
jenkins 설치 후 서비스 실행 및 상태 확인
$ sudo service jenkins start
$ sudo service jenkins enable # 재부팅 시에도 자동 실행
$ sudo service jenkins status # active라고 표시되면 실행되고 있는 상태임
근데 여기까지만 하면, 젠킨스가 작동중임에도 접속되지 않을 것이다.
AWS 포트 번호 열어주기
EC2 보안그룹에서 9090번 포트를 열어주어야 한다.
2. 젠킨스 접속 및 설정
패스워드 입력
ec2 인스턴스에서 위 사진에 보이는 경로로 이동해 비밀번호를 확인한다.
permission denied가 뜬다면 sudo를 붙이자!
$ cat /var/lib/jenkins/secrets/initialAdminPassword
플러그인 설치 화면
패스워드를 입력 후 아래와 같이 플러그인 설치화면이 나오는데 특별히 설치할 플러그인이 필요없다면 install suggested plugins를 선택한다.
그럼 아래처럼 Getting Started 페이지가 나올 것이다. 잠시 기다리자.
Admin 계정 생성
기다리면 이렇게 Admin 사용자를 생성하는 페이지가 나오는데, Admin 사용자를 생성하고 다음 화면을 누르면 Jenkins 화면이 보이는 것을 확인할 수 있다.
Instance Configuration
마지막으로 젠킨스의 TCP 포트를 앞으로도 계속 같은 포트를 쓸 것인지 물어본다.
이제 설정이 끝났다. Start using Jenkins를 누르자.
그럼 아래와 같은 대시보드가 나온다.
============
3. gradle 설치
$ mkdir /opt/gradle
$ unzip -d /opt/gradle gradle-6.9.1-bin.zip
$ ls /opt/gradle/gradle-6.9.1
$ export PATH=$PATH:/opt/gradle/gradle-6.9.1/bin
$ gradle -version
4. git 설치
$ sudo yum update -y
$ sudo yum install git -y
$ git version
Ref.
- https://velog.io/@sa1341/Jenkins-SSH%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-GitHub-%EC%97%B0%EB%8F%99%EB%B0%A9%EB%B2%95
- https://wan-blog.tistory.com/74?category=776763
- https://blog.naver.com/PostView.nhn?blogId=sharplee7&logNo=221429164857 - 포트 번호
- https://intrepidgeeks.com/tutorial/deploy-aws-jenkins - 젠킨스 설치
💛 개인 공부 기록용 블로그입니다. 👻