※ 해당 실습 기록은 이남훈 강사님의 Jenkins를 활용한 CI/CD 영상을 토대로 작성하였습니다.
※ 정상적으로 소스를 당겨오는지 확인을 위함이므로, 간단히 index.html에 hello world가 찍히는 정도의 소스로 테스트 한다.
프리티어를 사용하고 키/페어 생성한다. 키/페어를 생성 후, mv [pem 파일 경로] ~/.ssh
명령으로 해당 pem 파일의 위치를 ~/.ssh/로 옮긴다.
일반적으로 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 파일]
보안그룹에 아래와 같이 2개를 추가한다. (유형, 프로토콜, 포트 범위, 소스)
① 사용자 지정 TCP, TCP, 8080, 0.0.0.0/0
② 사용자 지정 TCP, TCP, 80, 0.0.0.0/0
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 계정으로 접속해서 처리해도 된다.
sudo yum install -y java-1.8.0-openjdk jenkins git docker
자바 버전8로 설정해주기 위해 alternatives --config java
명령을 사용.
sudo usermod -aG docker $USER
sudo usermod -aG docker jenkins
service jenkins start
명령을 사용하여 젠킨스 실행.
sudo docker service start
명령을 사용하여 도커 실행한다.
젠킨스 파이프라인에 도커 컨테이너를 사용하는 곳이 있어서 미리 실행해둔다.
브라우저에 aws instance private ip와 port를 입력하면 jenkins 첫 페이지가 나타난다.
initialAdminPassword를 입력하라고 나올 것이므로, 아래의 명령으로 패스워드를 확인 후, 복사한다.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
명령으로 나타난 패스워드를 복사하여 입력한다.
Install suggested plugins를 권장한다.
이 과정을 마치면 젠킨스 대시보드까지 들어올 수 있다.
젠킨스가 github에 붙기 위한 credential token을 세팅해준다.
jenkins dashboard에서
jenkins 관리 > manage credentials > jenkins > global credentials > add credential
github에서
settings > developer settings > personal access tokens > generated new token 클릭.
repo에 관한 권한만 주고 token 생성.
jenkins add credential에서
Kind: Username with password
Username: (github id)
Password: (github에서 생성한 personal access token 입력)
ID: (아무렇게나 작성 가능)
※ jenkins에서 git에 접근하기 위한 credential한 id이다. (추천 gitCredentialTokenForJenkins을 줄여서 gctfj)
pipeline의 환경변수에 aws의 access_key, secret_access_key를 사용하고 있는데, 이것 또한 '8번' 과정과 같이 credential 세팅이 필요하다.
jenkins만을 전문적으로 담당해줄 내 aws를 쓰는 하나의 사용자를 추가해준다.
이때, 프로그래밍 방식 엑세스를 체크 & 기존 정책 직접 연결 (admin 전체 권한)을 선택해서 사용자를 생성해준다.
※ '기존 정책 직접 연결'은 테스트 시에만 사용하기 바람.
이렇게 사용자를 생성하면 엑세스 키 ID, 비밀 엑세스 키가 나타난다. 여기서 생성된 각각의 키를 jenkins의 credential에 추가해준다.
jenkins add credential에서
Kind: Secret text
Secret: (aws에서 생성된 각각의 키 값)
ID: (파이프라인에서 선언한 키 값)
적당히 버킷 이름쓰고, 모든 퍼블릭 엑세스 차단만 체크해제 해주고 버킷 만들기.
※ 웹 사이트로 쓸 거니까, 모든 이의 엑세스를 허용해주는 것.
aws의 iam에서 jenkins 쪽에서 접근할 수 있는 유저를 aws - jenkins 사이에 맞추는 작업을 '9번'에서 이미 하였으므로, jenkins의 pipeline 코드에서 s3에 대한 접근도 가능하다.
jenkins dashboard에서
jenkins 관리 > 설치 가능 > docker 검색
검색된 plugin 중에서 docker pipeline, docker를 설치한다.
pipeline으로 생성한다.
jenkinsfile(pipeline script)도 git에서 받아와서 관리되도록 할 수 있고,
이번 item에 대해서 동작할 pipeline script를 사용할 수도 있다.
① Github project 체크하기. repo에 해당하는 url도 세팅. (맨 뒤이 .git은 제외)
② Poll SCM 체크하기. 주기적으로 polling 하는데 사용.
※ jenkinsfile에 triggers.pollSCM으로 작성했더라도 체크는 해줘야 처음에 한번 동작할 수 있음.
jenkins dashboard에서
jenkins 관리 > 시스템 설정 > Global properties에서 key/value 형태로 환경변수를 작성할 수 있다.
이제 jenkinsfile에 적힌 순서대로 파이프라인이 동작한다.
오류가 나면 로그를 확인할 수 있으니, 모든 이슈는 거기서 확인 가능하다.
정상적으로 배포가 되면 S3에 최종적으로 index.html가 올라간 것을 확인할 수 있다.
https://tacademy.skplanet.com/live/player/onlineLectureDetail.action?seq=190