Jenkins 자동 배포 - ZZinBros/miniprojects-2019 GitHub Wiki
install
Jenkins는 JVM 위에서 돌아가는 서비스입니다. 우리가 만드는 서버 애플리케이션도 JVM 위에서 돌아가므로, 먼저 Java를 설치해줘야 합니다.
- OpenJDK 설치
sudo apt update
sudo apt install openjdk-8-jdk
대안으로 OpenJDK의 구현체 중 하나인 Zulu JDK를 사용할 수도 있습니다. 기본 OpenJDK보다 성능이 더 좋다고 합니다. 둘 중 하나만 설치해주면 됩니다.
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0xB1998361219BD9C9
sudo apt-add-repository 'deb http://repos.azulsystems.com/ubuntu stable main'
sudo apt-get update
sudo apt-get install zulu-11
- Jenkins 설치
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins
참고: Installing Jenkins on Ubuntu
젠킨스를 AWS instance에 설치하면 기본적으로 8080 port에 젠킨스가 뜹니다. 8080 port로 접근하면 password를 입력하는 페이지가 나오고, AWS instance 어디에 최초 password가 저장되어 있는지 알려줍니다. 초기 패스워드를 복사해서 붙여넣기하고 설치하면 끝!
젠킨스에서 사용하는 기본 포트 8080을 바꾸려면 /etc/default/jenkins
의 설정 파일에서 HTTP_PORT
설정값을 고쳐줘야 합니다. 우리는 8000을 사용합니다.
빌드 환경 설정
Build를 위한 Execute Shell 명령어는 다음을 사용합니다. 빌드 이후 실행 등은 전적으로 PM2에 의존합니다. 다시 말해서, 젠킨스는 오직 webhook으로 신호를 받아 빌드 명령을 전달하는 역할만을 수행합니다.
$WORKSPACE/gradlew clean build
빌드가 끝나고 나면, 다음 명령으로 ./build/libs/
디렉터리에 생성된 jar 파일을 ./out/
디렉터리로 옮깁니다. ./out/
디렉터리는 미리 사전에 만들어서 소유자를 jenkins
로 바꿔둔 디렉터리로, .gitignore
에 등록되어 있습니다. PM2는 이 디렉터리를 감시하고 있습니다.
cp -f $WORKSPACE/build/libs/* $WORKSPACE/out/
sudo
권한 주기
Jenkins에 현재는 Jenkins에서 root 권한을 사용할 필요가 없지만, 필요하다면 아래 명령어로 visudo
파일을 열어 sudo 권한 설정을 해주면 됩니다.
sudo visudo
# User privileges specification
jenkins ALL=(ALL:ALL) NOPASSWD: ALL
Webhook 관련 설정
참고: docker를 이용한 CI 구축 연습하기 (젠킨스, 슬랙)
기타
/var/lib/jenkins/workspace/demo-test
디렉터리에서 수동으로sudo ./gradlew clean build
명령을 통해 빌드하는 것은 권장하지 않습니다. 만약 부득이하게 이렇게 빌드했을 경우, 반드시sudo chown -R jenkins:jenkins build/
명령으로 소유자를root
에서jenkins
로 돌려줘야 합니다. 그러지 않으면 이후 모든 젠킨스 빌드가 실패합니다.