IT/DevOps

[DevOps] CentOS 8 Jenkins CI, CD 환경 구축(feat. eGovCI)

어흥꼬비 2024. 5. 3.
반응형

목차

    이번엔 전자정부프레임워크의 서버용 개발환경을 이용해서 CI, CD를 구축했다.

    다음엔 저번에 설치한 GitLab과 새로 설치한 Jenkins로 처음부터 연동하는 것도 포스팅 예정이다.

     

    [DevOps] CentOS 8 JenKins 설치(feat. CI, CD)

    목차JenKins 설치과정내 경우는 jdk가 이미 설치되어 있었기에 그 부분은 생략했다.#공개키 가져온다.rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key#저장소 파일 설치sudo wget -O /etc/yum.repos.d/je

    yaga.tistory.com

     

    [DevOps] CentOS 8 GitLab 설치

    목차GitLab 설치과정#GitLab의 CentOS용 RPM 저장소 설치하기 위한 스크립트 다운로드 및 실행curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash#gitlab 커뮤니티버전 설치sudo yum

    yaga.tistory.com

    그림은 참 못그렸지만 구조는 대략적으로 아래와 같다.

    이로써 해보지 않았던 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 구축 가이드가 리눅스용은 참조할 만한 게 별로 없어서 삽질 많이했다.

    휴 이번 포스팅은 매우 힘들었다.

    미래의 나를 위해 하는 기록이고 누군가에게 작은 도움이 되길 바라며..


    개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.

    틀린 점 있을 경우 댓글 부탁드립니다.

    반응형

    댓글

    💲 추천 글