젠킨스는 소프트웨어 개발 시, 지속적으로 통합 서비스를 제공하는 툴이다.
이는 CI(Continuous Integration)툴이라 표현한다.
젠킨스는 정기적인 빌드에서 한발 나아가 서브버전, GIT과 같은 버전관리시스템과
연동하여 소스의 commit을 감지하면 자동적으로 자동화 테스트가 포함된 빌드가
작동되도록 설정 할 수 있다.
젠킨스 설치는 local, server 등에서 설치 가능하며, 아래 내용은 AWS EC2 서버에
젠킨스를 설치하는 내용이다.
- 우선, ssh로 해당 인스턴스 접속
- 젠킨스 저장소 키 설정
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
- Jenkins 서비스 실행 및 상태 확인
sudo service jenkins start
sudo service jenkins enable # 재부팅 시에도 자동 실행
sudo service jenkins status # active라고 표시되면 실행되고 있는 상태임
- 접속 포트번호 변경 및 재시작
아래 명령어로 접속포트를 설정 가능함(default는 8080)
ex) HTTP_PORT=8080sudo vi /etc/default/jenkins
sudo service jenkins restart
- 브라우저에 ip주소:포트번호 입력하여 접속 확인
IP 주소는 AWS > EC2 인스턴스에서 해당 인스턴스 선택 후,
하단의 설명 > IPv4 퍼블릭 IP 주소를 입력하면 된다.
ex) http://xx.xxx.xxx.xxx:8080
- 브라우저에 비밀번호 입력
명령어 입력 후, 나오는 문장을 브라우저에 입력해주면 Jenkins 설치 후, 접속까지 완료된다.sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Plugins 설치
비밀번호 입력 후, 접속하게 되면 Plugins 설치에 대한 화면이 표시된다.
- Install suggested plugins
Jenkins 커뮤니티에서 가장 유용하다고 알려진 플러그인들을 설치한다.
- slack plugin 추가 설치
나중에 Jenkins 관리 > 플러그인 관리 > slack 찾아서 설치하면 된다.
Jenkins 관리 > Manage Users > 사용자 생성
Jenkins 관리 > Manage Users > 톱니바퀴 선택 > User Defined Time Zone를 'Asia/Seoul'로 변경
- 좌측메뉴 중 새로운 Item 선택
- Item name 입력 후, Freestyle project 선택
위 그림과 같이 해당 Github url 입력 및 사용자 빌드 경로를 입력한다.
위 그림과 같이 Git - Repository URL을 ssh 주소로 넣는다.
그리고 아래처럼 Credentials를 생성하고 키를 선택한다.
위 그림에서 빌드 유발에 'GitHub hook trigger for GITScm polling' 체크
(Jenkins에서 위에서 선택한 브랜치에 Push가 들어오는 걸 확인 할 수 있도록 설정 하는 것)
그리고 Build - Execute shell - Command에 배포 될 저장소를 연결 해준다.
ex) scp -r /home/ubuntu/jenkins/Live_coinfit_admin/* ubuntu@xx.xxx.xxx.xx:/home/ubuntu/CoinFit_Admin/
(xx로 표기한 부분은 해당 인스턴스의 IP 주소임)
- Slack 연결 설정
slack 플러그인 설치 후,
Jenkins관리 > 플러그인 > 고급 > 플러그인 올리기를 해준다.
그리고 아래의 그림처럼 해당 기능들을 체크 해준다.
webhooks란 서버에서 어떠한 작업이 수행 되었을 때 해당 작업이 수행 되었음을 HTTP POST로 알리는 개념이다.
Jenkins에서 Push가 들어온 걸 확인하기 위해서는 Git에서 우선적으로 보내주어야 하기 때문에 설정이 필요하다.
- GitHub 해당 레파지토리의 Setting > Webhooks 선택
- Add webhook 선택
- Payload URL, Content type 선택
Payload URL은 http://젠킨스주소/github-webhook/을 입력한다.
ex) http://x.xx.xxx.xx:8080/github-webhook/
ssh 통신을 기본으로 사용하기 때문에 jenkins 서버의 ssh 보안그룹을 열어야함.
ex) 8080으로 젠킨스 포트를 설정 했다면 해당 jenkins 서버의 보안그룹에
8080 TCP 포트를 열어줘야함.
대상 서버에 디렉토리나 파일들의 소유권한은 root가 아닌 일반계정(ubuntu) 이어야함.
# 소유권 변경 sudo chown -R ubuntu:ubuntu [대상]
[jenkins 서버]
sudo -u jenkins /bin/bash
sudo cat /var/lib/jenkins/.ssh/id_rsa.pub
[대상 서버]
sudo vi /home/ubuntu/.ssh/authorized_keys
* /etc/sudoers 파일 편집모드로 들어가 해당 코드 추가
jenkins ALL=(ALL) NOPASSWD: ALL