#jenkins ### Jenkins 설치 #### 1.Docker Image 준비 (외부인터넷 연결 + 도커 설치된 환경에서 작업) ```shell # 폴더 생성 mkdir /opt/jenkins && cd jenkins && mkdir jenkins_home # docker-compose 파일 생성 -------------------------------------------------------------------------------- version: '3.8' services: jenkins: image: jenkins/jenkins:lts container_name: jenkins user: root # environment: # - TZ=Asia/Seoul privileged: true ports: - 9093:8080 # - 9000:50000 volumes: - ./jenkins_home:/var/jenkins_home - /var/run/docker.sock:/var/run/docker.sock restart: unless-stopped -------------------------------------------------------------------------------- # Docker image 빌드 및 실행 docker-compose build && docker-compose up -d # Jenkins 실행 확인 ## Jenkins Unlock Password 확인 (Unlock 이후 파일 삭제됨) cat ./jenkins_home/secrets/initialAdminPassword ## jenkins 페이지 접속 및 초기 설정 # 1. http://{hostname}:9093 접속 # 2. 최초1회 Unlock Password 입력하여 Unlock # 3. 관리자 계정 생성 # 4. Jenkins URL 정보 확인 및 수정 # 5. "Start using Jenkins" 버튼클릭하여 초기설정 완료 # 6. 기본 Plugin 설치진행 # Docker image Export ocker save -o /home/gmt/docker_data/docimg_jenkins.tar jenkins/jenkins ``` #### 2.Plugin 설치 - Dashboard > Jenkins 관리 > Plugins > Available plugins (/manage/pluginManager/available) - GitLab Plugin - Maven Integration plugin - Publish Over SSH - Publish Over FTP #### 3.Jenkins에 Maven 설치 - Dashboard > Jenkins 관리 > Tools > Maven installations (/manage/configureTools/) - Name : 임의입력 - Install automatically 선택 - Version 선택후 저장 ![[Pasted image 20240403173424.png]] #### 4.폐쇄망 서버 이관 준비 ```shell # Docker image Export ocker save -o /home/gmt/docker_data/docimg_jenkins.tar jenkins/jenkins # Jenkins Plubin Export cd /opt/jenkins/ && mkdir jenkins_plugins && cp -r jenkins_home/plugins/*.jpi jenkins_plugins/ cd jenkins_plugins/ && ls | grep '.jpi' | cut -d . -f 1 | while read line; do mv $line.jpi $line.hpi; done && tar -cvf ../plugins.tar ./ # Jenkins Tools Export (maven... ) cd /opt/jenkins/jenkins_home/ tar -cvf tools.tar tools # 최종 이관 파일 List - docimg_jenkins.tar - plugins.tar - tools.tar - + Docker, Docker-compose 설치파일 ``` ### Maven Repository 준비 ##### Jenkins에 설치한 동일한 버전의 Maven 설치 - https://archive.apache.org/dist/maven/maven-3/ - 환경변수 MAVEN_HOME, D:\MAVEN\apache-maven-3.9.6 - CMD> mvn -v ##### setting.xml 작성 - **라이브러리 저장될 폴더 상위에 setting.xml 작성** ```xml D:\Workspace\Jenkins\tet_git\maven_repository ``` ##### Offline용 라이브러리 다운로드 - 프로젝트 폴더로 이동하여 CMD 실행 ```c # Offline에서 참조할 dependency 목록과 함께 다운로드 mvn dependency:go-offline -gs D:\Workspace\Jenkins\tet_git\settings.xml # 기본옵션으로 빌드 mvn clean install -gs D:\Workspace\Jenkins\tet_git\settings.xml # Offline옵션으로 빌드(테스트) mvn -o clean install -gs D:\Workspace\Jenkins\tet_git\settings.xml # repository 압축 tar -cvf maven_repository.tar .\maven_repository # Jenkins서버로 압축파일 전송 scp -P 11443 maven_repository.tar root@10.200.31.42:/home/gmt/jenkins_home/ ``` ##### 폐쇄망 Jenkins서버 구성 ### Jenkins CI/CD 환경 구성 ##### 1.SSH 설정 ```shell # jenkins 서버에서 key발급 docker exec -it jenkins bash ssh-keygen # ssh key 확인 ## 경로: /root/.ssh/ ## id_rsa : 비공개키 ## id_rsa.pub : 공개키 ``` - 비공개키 붙여넣기 Dashboard > Jenkins 관리 > System > Publish over SSH (/manage/configure) ![[Pasted image 20240404092425.png]] - SSH Server 추가 (key사용하여 비밀번호 없이 로그인) ![[Pasted image 20240404092657.png]] ##### 2. Maven 설정 - Dashboard > Jenkins 관리 > Tools > Maven Configuration (/manage/configureTools) ![[Pasted image 20240404092924.png]] - Dashboard > Jenkins 관리 > Tools > Maven installations ![[Pasted image 20240404093006.png]] ##### 3.GitLab 설정 - 3-1. GitLab에서 유저 생성( 소스 Pull 용) - Admin -> Users -> New user - Nane, Username, Email, Password만 입력 하고 나머지 기본. ![[Pasted image 20240404093714.png]] - 3-2. 프로젝트 Group Member추가 - Groups -> SACP(프로젝트 Group 클릭) -> 오른쪽하단 group members에서 Manage access 버튼 클릭 ![[Pasted image 20240404094102.png]] - Invite members 버튼 -> 팝업창에 새로추가한 유저 선택하고 Invite 버튼 (role은 Guest여도 상관없음) - 3-3. Access Token 발급 - Preferences(User Settings) -> Access Tokens - Token name : 임의입력 - Select scopes : 모두 체크 - 생성하고 화면 상단의 키 복사(이후에 다시 확인 할 수 없음) - 3-4. Jenkins Credential 등록 - Dashboard > Jenkins 관리 > Credentials > Stores scoped to Jenkins (/manage/credentials) - Domains -> Global -> Add Credential - Kind, API token 입력 - 선택1(API Token) ![[Pasted image 20240404095641.png]] - 선택1(Username, password) ![[Pasted image 20240404100125.png]] ### Jenkins Pipline 설정 - 소스 코드 관리 -> Git 선택 - Repository URL, Credentials, Branch Specifier 입력 - 빌드 유발 -> Build when a change is pushed to GitLab. GitLab webhook URL:... - 고급 클릭하면 맨밑에 Secret token -> Generate 버튼 - URL과, Secret token 복사하여 GitLab에서 Webhook 설정 - Build -> Goals and options : -o clean install -DskipTests=true - 빌드 후 조치 -> 추가 -> "Send build artifacts over SSH" 선택 ![[Pasted image 20240404100942.png]] ### ※ GitLab Webhook 설정 1. 사전 준비 - Admin Area -> Settings -> Network -> Outbound requests - Allow requests to the local network from web hooks and services 체크 ※ Webhook 설정시 (Url is blocked: Requests to the local network are not allowed) 오류 방지 2. Webhook 설정 - 프로젝트별로 설정해야함 - GitLab -> 프로젝트 -> Settings -> Webhooks - URL, Secret token 입력 - Add webhook 버튼