Jenkins 실습 기록

망7H·2021년 3월 30일
0

※ 해당 실습 기록은 이남훈 강사님의 Jenkins를 활용한 CI/CD 영상을 토대로 작성하였습니다.

1. create code.

※ 정상적으로 소스를 당겨오는지 확인을 위함이므로, 간단히 index.html에 hello world가 찍히는 정도의 소스로 테스트 한다.

2. github에 git repository - remote 세팅.


3. create aws ec2 instance.

(1) 키/페어 생성 후, 위치 이동.

프리티어를 사용하고 키/페어 생성한다. 키/페어를 생성 후, mv [pem 파일 경로] ~/.ssh 명령으로 해당 pem 파일의 위치를 ~/.ssh/로 옮긴다.

(2) 쉬운 원격접속을 위한 세팅.

일반적으로 aws 원격 접속을 위해 ssh -i [pem 파일] ec2-user@[aws instance private ip] 와 같은 명령을 사용하는데, 원격 접속을 편하게 하기 위해 ~/.ssh/config를 수정해준다. vim ~/.ssh/config 아래와 같이 config를 변경해주면 aws 원격 접속을 위해 ssh jenkins_host와 같이 입력하면 된다.

Host jenkins_host
User ec2-user
HostName [aws instance private ip]
IdentityFile ~/.ssh/[pem 파일]

(3) 보안그룹 추가 세팅.

보안그룹에 아래와 같이 2개를 추가한다. (유형, 프로토콜, 포트 범위, 소스)
① 사용자 지정 TCP, TCP, 8080, 0.0.0.0/0
② 사용자 지정 TCP, TCP, 80, 0.0.0.0/0

4. install jenkins package in aws ec2.

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins.io/redhat/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
※ ec2-user의 권한이 없어서 안되는 경우가 발생할 수도 있다. root 계정으로 접속해서 처리해도 된다.

5. install java, docker, git in aws ec2.

(1) 다운로드

sudo yum install -y java-1.8.0-openjdk jenkins git docker
자바 버전8로 설정해주기 위해 alternatives --config java 명령을 사용.

(2) 도커를 사용할 수 있는 그룹에 젠킨스 추가

sudo usermod -aG docker $USER
sudo usermod -aG docker jenkins

6. run jenkins, docker in aws ec2.

(1) jenkins 실행.

service jenkins start 명령을 사용하여 젠킨스 실행.

(2) docker 실행.

sudo docker service start 명령을 사용하여 도커 실행한다.
젠킨스 파이프라인에 도커 컨테이너를 사용하는 곳이 있어서 미리 실행해둔다.

7. run jenkins and check jenkins dashboard.

(1) jenkins initialAdminPassword 입력

브라우저에 aws instance private ip와 port를 입력하면 jenkins 첫 페이지가 나타난다.
initialAdminPassword를 입력하라고 나올 것이므로, 아래의 명령으로 패스워드를 확인 후, 복사한다.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword 명령으로 나타난 패스워드를 복사하여 입력한다.

(2) 초기 plugin 설치

Install suggested plugins를 권장한다.

(3) 초기 관리자 생성

이 과정을 마치면 젠킨스 대시보드까지 들어올 수 있다.

8. set jenkins credential for git.

젠킨스가 github에 붙기 위한 credential token을 세팅해준다.

(1) git credential 등록을 위한 jenkins의 페이지로 이동.

jenkins dashboard에서
jenkins 관리 > manage credentials > jenkins > global credentials > add credential

(2) github personal access token generate

github에서
settings > developer settings > personal access tokens > generated new token 클릭.
repo에 관한 권한만 주고 token 생성.

(3) github에서 생성한 token을 jenkins 유저에 등록

jenkins add credential에서
Kind: Username with password
Username: (github id)
Password: (github에서 생성한 personal access token 입력)
ID: (아무렇게나 작성 가능)
※ jenkins에서 git에 접근하기 위한 credential한 id이다. (추천 gitCredentialTokenForJenkins을 줄여서 gctfj)

9. set jenkins credential for aws ec2.

pipeline의 환경변수에 aws의 access_key, secret_access_key를 사용하고 있는데, 이것 또한 '8번' 과정과 같이 credential 세팅이 필요하다.

(1) aws iam에서 사용자 추가

jenkins만을 전문적으로 담당해줄 내 aws를 쓰는 하나의 사용자를 추가해준다.
이때, 프로그래밍 방식 엑세스를 체크 & 기존 정책 직접 연결 (admin 전체 권한)을 선택해서 사용자를 생성해준다.
※ '기존 정책 직접 연결'은 테스트 시에만 사용하기 바람.
이렇게 사용자를 생성하면 엑세스 키 ID, 비밀 엑세스 키가 나타난다. 여기서 생성된 각각의 키를 jenkins의 credential에 추가해준다.

(2) aws iam에서 생성한 key를 jenkins 유저에 등록

jenkins add credential에서
Kind: Secret text
Secret: (aws에서 생성된 각각의 키 값)
ID: (파이프라인에서 선언한 키 값)

10. create aws s3 bucket.

적당히 버킷 이름쓰고, 모든 퍼블릭 엑세스 차단만 체크해제 해주고 버킷 만들기.
※ 웹 사이트로 쓸 거니까, 모든 이의 엑세스를 허용해주는 것.
aws의 iam에서 jenkins 쪽에서 접근할 수 있는 유저를 aws - jenkins 사이에 맞추는 작업을 '9번'에서 이미 하였으므로, jenkins의 pipeline 코드에서 s3에 대한 접근도 가능하다.

11. install docker plugin.

jenkins dashboard에서
jenkins 관리 > 설치 가능 > docker 검색
검색된 plugin 중에서 docker pipeline, docker를 설치한다.

12. jenkins item 만들기.

pipeline으로 생성한다.

(1) 기존에 작성해둔 코드에서 jenkins pipeline 소스를 복붙해넣는다.

jenkinsfile(pipeline script)도 git에서 받아와서 관리되도록 할 수 있고,
이번 item에 대해서 동작할 pipeline script를 사용할 수도 있다.

(2) 몇몇 옵션 체크하기.

① Github project 체크하기. repo에 해당하는 url도 세팅. (맨 뒤이 .git은 제외)
② Poll SCM 체크하기. 주기적으로 polling 하는데 사용.
※ jenkinsfile에 triggers.pollSCM으로 작성했더라도 체크는 해줘야 처음에 한번 동작할 수 있음.

13. jenkinsfile에 사용될 환경변수 설정.

jenkins dashboard에서
jenkins 관리 > 시스템 설정 > Global properties에서 key/value 형태로 환경변수를 작성할 수 있다.

14. build now.

이제 jenkinsfile에 적힌 순서대로 파이프라인이 동작한다.
오류가 나면 로그를 확인할 수 있으니, 모든 이슈는 거기서 확인 가능하다.
정상적으로 배포가 되면 S3에 최종적으로 index.html가 올라간 것을 확인할 수 있다.



해당 글 작성에 참고한 링크

https://tacademy.skplanet.com/live/player/onlineLectureDetail.action?seq=190

profile
망한 개발자의 개발 기록입니다. 저를 타산지석으로 삼으시고 공부하세요.

0개의 댓글