이전 포스팅에서 CI/CD에 대해 조사해 보았고, Jenkins로 CI/CD를 구축하기로 했다.
많은 검색과 삽질을 통해 한 챕터를 마무리할 수 있었다
진행했던 과정을 정리하는 느낌으로 글을 작성하려 한다.
Reference 블로그들과 여러 검색 자료를 참고하여 구축해 보았다.
블로그 글을 참고하여 과정을 그림으로 표현해보았는데 다음과 같다.
Jenkins가 용량이 커서 젠킨스 전용 서버로 따로 설치해야 한다는 글을 어디서 읽은 것 같은데..
찾아보니, AWS 홈페이지에 젠킨스를 설치할 때, 다음과 같은 방식으로 진행하는 것을 확인할 수 있었다. [참고2]
AWS Jenkins 설치
1. EC2 인스턴스 추가로 생성
(설치 방법: https://mean-ji.tistory.com/55)
[참고 1] 블로그는 apt 명령어로 jenkins를 설치한 것을 보니 우분투 기반으로 EC2를 설치한 것 같다.
나의 경우, Amazon Linux 2를 설치했기 때문에 [참고 3] 블로그를 보고 젠킨스를 설치했다.
인스턴스 생성 후, yum 패키지를 최신 버전으로 업데이트해주고 java 8을 설치한다.
2. EC2에 접속 후, yum의 젠킨스 설치 경로인 jenkins repository를 추가
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
3. 젠킨스를 설치할 때, 파일들이 신뢰할 수 있는 소스로부터 제공되었다는 것을 증명하기 위한 local GPG 키링에 Jenkins GPG Key를 추가
sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
4. 젠킨스 설치
sudo yum install jenkins
5. 젠킨스를 git에 연동하여 사용하므로 git도 설치
sudo yum install git
6. 젠킨스 시작
sudo systemctl jenkins start
7. 젠킨스 실행 확인
sudo systemctl status jenkins
명령어를 입력해 보면 다음과 같이 젠킨스가 실행되고 있음을 확인할 수 있다.
8. [선택사항] 젠킨스 서비스가 시스템 부팅 시 함께 실행될 수 있도록
비용 문제로 인스턴스를 계속 틀어놓을 수 없을 때는 인스턴스를 종료하고 다시 시작해야 하는데, 다시 시작했을 때 아래의 명령어를 입력해 놓으면 자동으로 젠킨스도 함께 실행이 된다.
sudo systemctl enable jenkins
AWS Jenkins 접속
1. http://퍼블릭 IPv4 주소:8080으로 접속
(한 10분 정도 http://퍼블릭 IPv4 주소/8080 이렇게 접속하고서, 접속 안되네...? 했던 제 자신... 반성해야겠다..)
다음과 같은 화면을 볼 수 있는데, 이는 /var/lib/jenkins/secrets/initialAdminPassword 에서 암호를 확인하고 입력하라는 내용이다.
2. sudo cat /var/lib/jenkins/secrets/initialAdminPassword를 입력 후 암호 입력
암호를 입력하면 다음과 같은 화면이 나타난다.
다음 화면처럼 설치가 진행된다. (살짝 시간 걸려서 딴짓할 수 있다ㅎㅎ)
3. 계정 생성
계정 생성을 완료하면 다음과 같이 대시보드 화면이 나타난다.
Jenkins와 Github 연동
1. 젠킨스에서 깃헙 프로젝트를 접근하기 위해 ssh키를 생성
sudo mkdir /var/lib/jenkins/.ssh
sudo ssh-keygen -t rsa -f /var/lib/jenkins/.ssh/키이름
2. 젠킨스를 사용할 깃헙 프로젝트 > Settings > Deploy keys > Add deploy key
key 확인 방법
cd /var/lib/jenkins/.ssh
cat 키이름.pub
이 키를 복붙 하면 된다.
3. Jenkins Credential 등록
깃헙에 해당 프로젝트를 연동하기 위해 프라이빗 키를 젠킨스 크레덴셜로 등록해야 한다.
젠킨스 대시보드 > Jenkins 관리 > Manage Credentials
global에서 add credentials로 크레덴셜을 추가한다.
SSH Username with private key로 선택한 후, ID, Description, Username을 작성한다.
(저는 id, username 모두 jenkins-github로 설정했습니다.)
Enter directly를 체크하고 Add를 누른 후, EC2에서 'sudo cat 키 이름'으로 프라이빗 키를 확인 후 복붙 한다.
아래의 형식의 키를 입력해야 한다.
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
Create를 누르고 생성을 완료한다.
여기서부터는 따라 하면서 공부하는 정도로 보시면 좋을 것 같습니다 :)
저는 Freestyle Project를 만들어 보면서 젠킨스에 대해 조금 더 공부해 보았고
실제로 사용한 건(파이프라인을 이용한 도커 이미지 배포) 다음 포스팅에 작성해 두었습니다😀
Jenkins, 배포 서버 SSH 연결
public over ssh는 2022.1.12 부로 중단되었다고 한다.
다른 방법으로 배포 서버와 연결해 주어야 할 것 같다
(ssh agent를 사용, 자세한 내용은 다음 포스팅에 작성되어 있다)
Jenkins서버에 도커 설치
1. sudo yum install docker로 도커를 설치한다.
2. sudo systemctl start docker로 도커를 실행한다.
8. sudo docker login
Jenkins Item 생성
1. item 생성
Jenkins 대시보드 > 새로운 item > Freestyle project
GitHub Project를 선택한 뒤 소스코드 관리를 Git으로 선택한다.
URL을 적어주고, Credentials는 아까 생성한 Credential을 선택해줍니다.
깃 레파지토리 적을 때, "new accept" 에러가 난다면 git client plugin에러일 가능성이 있다.
글 작성 당시 기준으로, 이 플러그인 버전이 3.11.1은 해당 에러가 난다고 한다.
플러그인을 3.11.0으로 설치한 다음에 다시 연결해보면 잘 된다 :) [참고5]
Jenkins Github Webhook설정
Github Repository > Settings > Webhook > add webhook에 들어간 뒤
1. Payload URL을 http://젠킨스 url:포트/github-webhook/으로 작성한다.
맨뒤에 /를 붙여야 한다. 안 붙이면 302 에러 발생
2. Content type을 application/json으로 설정한다.
해당 레파지토리에서 푸시가 일어나면 웹 훅이 젠킨스를 호출한다!
끝!
AWS에서 Jenkins로 CI/CD 구축해 보았는데, 온프레미스에서는 젠킨스를 어떻게 사용할지도 궁금해서 찾아보니
아래 링크에 잘 정리가 되어있어서 읽어 보았다
https://ontheterrace.tistory.com/entry/GitLAB%EA%B3%BC-Jenkins-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0
온프레미스 GitLAB과 Jenkins 설치 및 연동하기 (1)
CICD는 관련 솔루션이 많고 구성하기 나름이라 딱히 어떤 구성을 권장 할수는 없는데 이는 회사마다의 규모, 개발조직, 개발자 수, 개발문화, 관련 프로세스, 기술스택 등이 모두 다르기 때문이다
ontheterrace.tistory.com
Reference
[참고1]
[참고2]
https://aws.amazon.com/ko/getting-started/hands-on/setup-jenkins-build-server/
[참고3]
https://blog.illunex.com/201207-2/
[참고4]
https://jjeongil.tistory.com/1366
[참고5]
https://issues.jenkins.io/projects/JENKINS/issues/JENKINS-69149?filter=allopenissues
'Server > DevOps' 카테고리의 다른 글
CI/CD (Github Actions와 Jenkins 비교) (0) | 2022.08.25 |
---|---|
[AWS] Jenkins CI/CD 구축하기_(2) (0) | 2022.08.25 |
[AWS] EC2 Docker 설치 및 컨테이너 실행 (+NGINX) (0) | 2022.08.25 |
[AWS] EC2 생성 및 접속 (0) | 2022.08.25 |
[AWS] EC2 리눅스 배포판 선택 (0) | 2022.08.25 |