AWS Jenkins 배포하기

denver·2022년 1월 4일
3

젠킨스란?

젠킨스는 소프트웨어 개발 시, 지속적으로 통합 서비스를 제공하는 툴이다.
이는 CI(Continuous Integration)툴이라 표현한다.
젠킨스는 정기적인 빌드에서 한발 나아가 서브버전, GIT과 같은 버전관리시스템과
연동하여 소스의 commit을 감지하면 자동적으로 자동화 테스트가 포함된 빌드가
작동되도록 설정 할 수 있다.
젠킨스 설치는 local, server 등에서 설치 가능하며, 아래 내용은 AWS EC2 서버에
젠킨스를 설치하는 내용이다.

Jenkins 설치 및 환경설정(ubuntu)

  • 우선, 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=8080
sudo 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

Jenkins 초기설정

Plugins 설치
비밀번호 입력 후, 접속하게 되면 Plugins 설치에 대한 화면이 표시된다.

  • Install suggested plugins
    Jenkins 커뮤니티에서 가장 유용하다고 알려진 플러그인들을 설치한다.
  • slack plugin 추가 설치
    나중에 Jenkins 관리 > 플러그인 관리 > slack 찾아서 설치하면 된다.

Admin 계정 생성

Jenkins 관리 > Manage Users > 사용자 생성

Time Zone 서울 시간으로 변경

Jenkins 관리 > Manage Users > 톱니바퀴 선택 > User Defined Time Zone를 'Asia/Seoul'로 변경

Jenkins 새로운 Item 생성

  • 좌측메뉴 중 새로운 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관리 > 플러그인 > 고급 > 플러그인 올리기를 해준다.
    그리고 아래의 그림처럼 해당 기능들을 체크 해준다.

Git Webhooks 설정

webhooks란 서버에서 어떠한 작업이 수행 되었을 때 해당 작업이 수행 되었음을 HTTP POST로 알리는 개념이다.
Jenkins에서 Push가 들어온 걸 확인하기 위해서는 Git에서 우선적으로 보내주어야 하기 때문에 설정이 필요하다.

Jenkins 프로젝트 추가 방법

보안그룹

ssh 통신을 기본으로 사용하기 때문에 jenkins 서버의 ssh 보안그룹을 열어야함.
ex) 8080으로 젠킨스 포트를 설정 했다면 해당 jenkins 서버의 보안그룹에
8080 TCP 포트를 열어줘야함.

소유권

대상 서버에 디렉토리나 파일들의 소유권한은 root가 아닌 일반계정(ubuntu) 이어야함.

# 소유권 변경
sudo chown -R ubuntu:ubuntu [대상]

해당 AWS 인스턴스 서버에 Jenkins IP를 반드시 넣어줘야함!!

  • 대상 서버의 보안그룹 인바운드 규칙 추가하기
    SSH - [젠킨스서버 IP]/32 저장

shell 설정

[jenkins 서버]

  • 젠킨스 유저로 쉘 열기(필수!!)
sudo -u jenkins /bin/bash
  • 젠킨스 공개키 확인
sudo cat /var/lib/jenkins/.ssh/id_rsa.pub

[대상 서버]

  • 위 젠킨스 공개키를 아래 대상 서버 authorized_keys에 추가해준다.
sudo vi /home/ubuntu/.ssh/authorized_keys
  • Execute shell command sudo를 사용하기 위해 파일 편집
* /etc/sudoers 파일 편집모드로 들어가 해당 코드 추가
jenkins ALL=(ALL) NOPASSWD: ALL

젠킨스 빌드쉘에서 많이 사용되는 명령어

  • ssh known_hosts 추가 및 연결 테스트
    ex) ssh ubuntu@[대상서버 IP] ls -al // 이 작업은 필수
    그리고 'WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED'과 같은
    오류가 나는 경우에는 기존에 있던 서버 또는 ssh 관련 정보가 변경이 되어 나는 오류이며,
    해결법은 다음과 같다.
    ssh-keygen -R [대상서버 IP]
    그리고 다시 위의 ssh ubuntu@[대상서버 IP] ls -al 입력 후, "yes" 입력하면 끝.
  • 원격 파일전송
    젠킨스 서버 /Live_coinfit_api/를 ubuntu@x.xx.xxx.xx의 /home/ubuntu/Live_coinfit_api로 전송
    ex) scp -r /Live_coinfit_api/
    ubuntu@x.xx.xxx.xx:/home/ubuntu/Live_coinfit_api
profile
Python, AWS, Node, PHP, Git Developer

0개의 댓글