목차
이번엔 전자정부프레임워크의 서버용 개발환경을 이용해서 CI, CD를 구축했다.
다음엔 저번에 설치한 GitLab과 새로 설치한 Jenkins로 처음부터 연동하는 것도 포스팅 예정이다.
그림은 참 못그렸지만 구조는 대략적으로 아래와 같다.
이로써 해보지 않았던 JenKins 세팅이라는 small success를 또 얻었다. 😄
1. 개발자pc에서 GitLab으로 소스를 commit/push한다.
2. GitLab에 push 이벤트 발생 시 webhook을 이용해서 jenkins의 job을 실행시킨다.
3. jenkins의 job에서는 빌드 툴(여기선 maven)을 이용해서 빌드한다.
4. 빌드가 성공적으로 수행된 경우 WAS의 배포경로에 소스를 war파일 형태로 배포한다.
다음엔 버추얼박스에 다 설치해서 라이브로 촬영할까 생각중이다.
GitLab Community Edition ver: 15.9.1
Jenkins 2.426.3
JenKins를 띄우는 tomcat 9.0.85
jdk 17.0.11(OpenJDK Corretto)
apache-maven 3.9.6
내용이 기니까 목차로 이동하길 바란다.
서버용 개발환경 다운로드 및 업로드
아래 경로에서 eGovCI-4.2.0.tar.xz를 다운로드 받는다.
https://www.egovframe.go.kr/home/sub.do?menuNo=94
업로드 권장 경로(/home/사용자폴더)에 업로드 한다.
업로드한 eGovCI-4.2.0.tar.xz의 압축을 해제한다.
서버용 개발환경 폴더 목록을 확인한다.
Jenkins 실행 및 설정
서버용 개발환경 리눅스용은 jdk가 동봉되어 있지 않으니 jdk를 미리 세팅해놔야 한다.
이 부분은 표준프레임워크센터에서 리눅스용 배포할 때 누락된건지 정확히 알 수 없다. 😥
그냥 다 넣어주면 좋으련만..리눅스용 말고 아래처럼 windows용은 jdk 1.8과 17 둘 다 들어있다.
세팅된 jdk와 jenkins를 연동하기 위해 다음 파일의 JAVA_HOME 경로를 수정한다.
vi /home/사용자폴더/eGovCI-4.2.0/setEnv.sh
jenkins를 띄우는 tomcat의 포트 변경(WAS와 port 중복 방지) 후 방화벽을 해제한다.
#포트 설정 수정하기 위한 파일 편집
vi /home/사용자명/eGovCI-4.2.0/bin/apache-tomcat-9.0.85-jenkins/conf/server.xml
#방화벽 허용
sudo firewall-cmd --permanent --zone=public --add-port=포트번호/tcp
#방화벽 적용
sudo firewall-cmd –reload
#방화벽 허용 목록
sudo firewall-cmd --list-all
jenkins를 기동한다.
jenkins의 admin 임시 비밀번호를 확인 후 복사한다.
cat /home/사용자명/eGovCI-4.2.0/home/Jenkins/secrets/initialAdminPassword
브라우저에서 host:8081/jenkins로 호출한 뒤 admin/임시비밀번호로 로그인 한다.
그 후 admin 비밀번호를 변경 후 재로그인한다.(Jenkins관리 > Users > Password)
Tools
Jenkins 관리 > System Configuration > Tools 선택 후 Maven Configuration, JDK installations, Git installations, Maven installations을 설정 후 저장한다.
GitLab Plugin 설치
소스 저장소가 GitLab이라서 GitLab 플러그인을 설치한다.(Jenkins관리 > Plugins > 사용가능 플러그인)
Item 생성 및 설정
작업을 진행할 Item명 입력 후 Maven project 선택 후 Ok를 누른다.
소스코드관리에서 Git을 선택한 후 Repository URL에 GitLab 저장소 URL을 입력한다.
현재는 GitLab 계정이 없어서 연결이 실패한다.
Credentials > Add(Jenkins) 선택 후 Username, Password만 본인의 gitLab계정로 입력 후 Add를 누른다.(ID, Description은 선택사항이다.)
Git > Repositories > Credentials에서 방금 추가한 계정을 선택한다.
Branches to build는 테스트를 위해서 Branch Specifier를 빈값으로 해서 모든 branch로 설정했다.
Apply를 누른다.
빌드유발에서 Build when a change is pushed to GitLab을 체크 후 GitLab webhook URL을 메모해 둔다.
빌드 유발 > 스크롤 내려서 Secret token에서 Generate을 누르면 토큰이 생성되는데 이를 메모해 두고 (절대 외부에 유출되면 안된다.) Apply 누른 후 저장을 누른다.
GitLab으로 이동 후 > 해당 프로젝트 > Settings > Access Tokens에서 토큰을 생성한다.
만료일을 지울 경우 만료가 없게 되고 Select scopes는 상황에 맞게 체크 후 Create Project access token 선택 시 토큰이 생성되는데 이를 메모해둔다. (절대 외부에 유출되면 안된다.)
Settings > Webhooks에서 URL에 jenkins에서 메모해 둔 GitLab webhook URL을 입력(이 때 host는 localhost가 실제 IP를 입력해야 외부 통신이 된다.), Secret token도 jenkins에서 생성한 토큰 입력 후 Trigger > Push events에서 원하는 branch를 체크 한 뒤 (테스트를 위해 All branches로 체크했다.) Add webhook을 누른다.
만일 webhook 생성 시 아래처럼 에러가 발생 할 경우 전체 관리자로 접속 후 Admin Area > Network > outbound requests 선택 후 Allow requests to the local network from web hooks and services 체크 후 저장 한 뒤 재시도한다.
webhook이 생성되면 Test > Push events를 눌러 테스트한다.
만일 아래처럼 403 에러 발생할 경우 jenkins에서 Secret token이 제대로 생성되었는지 확인한다. Secret token Generate 후 Apply 누른 후 저장을 눌러야 생성된다.
webhook 정상 통신 될 경우 아래처럼 상태값 200이 확인된다.
다시 Jenkins로 와서 Jenkins 관리 > Credentials > Stores scoped to Jenkins에서 Domains의 global을 누른다.
Kind > GitLab API token 선택, API token에 GitLab에서 생성한 API token을 입력 후 Create를 누른다.
Jenkins 관리 > System > GitLab에서 Connection name, GitLab host URL 입력 후 Credentials에서 생성한 GitLab API token 선택 후 Test Connection을 누르고 Success가 표출되는지 확인한다.
Dashboard에서 아까 생성한 item 선택 후 구성을 누르고 Build부분에서 Goals and options에 아래처럼 입력(상황에 따라 다르게 입력한다.) 후 Apply를 누른다.
WAS(apache tomcat 9.x) 설정
WAS에 tomcat manager 계정으로 관리할 수 있도록 아래 명령어로 파일을 편집 후 tomcat 재기동한다.
#tomcat user 편집
vi /tomcat설치경로/tomcat/conf/tomcat-users.xml
#tomcat manager 원격 접속 허용하기 위함
vi /tomcat설치경로/tomcat/webapps/manager/META-INF/context.xml
# <Value className…> 주석처리
브라우저에서 host:port/manager 호출 후 생성한 tomcat manager계정으로 접속 되는지 확인한다.
다시 Jenkins로 와서 Jenkins관리 > Plugins에서 deploy라고 검색 후 Deploy to container를 설치한다.
Item > 구성에서 빌드 후 조치 > 빌드 후 조치 추가에서 Deploy war/ear to a container를 선택한다.
War/EAR files의 표현식을 입력 후(매뉴얼에서는 모든 war파일로 입력했다.)
Containers > Add Container 선택 후 Tomcat 9.x Remote를 선택한다.
Tomcat 9.x Remote > Credentials > Add(Jenkins)누른 후 tomcat manager정보를 입력 후 Add를 눌러서 추가 후 Credentials에서선택 후 Tomcat URL 입력 후 저장한다.
CI, CD 테스트
테스트용으로 branch 생성 및 화면 수정 후 GitLab에 commit/push한다.
Jenkins에서 빌드가 실행된다.
Console Output 선택 시 로그를 확인할 수 있다.
서버의 WAS 배포 경로에 war파일의 배포상태를 확인한다.
war파일이 잘 옮겨졌고 압축도 풀렸다.
브라우저에서 웹 애플리케이션의 url 호출 후 로그인 화면 내용의 변경을 확인한다.
정상적으로 수정한 소스가 적용되었다.
전자정부 CI 구축 가이드가 리눅스용은 참조할 만한 게 별로 없어서 삽질 많이했다.
휴 이번 포스팅은 매우 힘들었다.
미래의 나를 위해 하는 기록이고 누군가에게 작은 도움이 되길 바라며..
개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.
틀린 점 있을 경우 댓글 부탁드립니다.
'IT > DevOps' 카테고리의 다른 글
[git] git reset(feat. soft, mixed, hard) (36) | 2024.06.06 |
---|---|
[DevOps] Nexus 실행 및 연동 (feat. eGovCI) (37) | 2024.05.08 |
[DevOps] CentOS 8 GitLab 설치 (35) | 2024.05.01 |
[DevOps] CentOS 8 JenKins 설치(feat. CI, CD) (37) | 2024.05.01 |
[DevOps] CentOS7 설치부터 jdk, mysql, tomcat 연동까지 과정 (55) | 2024.04.25 |