2024-04-12 09:43:44 +00:00
|
|
|
#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
|
|
|
|
|
|
|
|
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
|
|
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
|
|
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
|
|
|
|
|
|
|
|
<localRepository>D:\Workspace\Jenkins\tet_git\maven_repository</localRepository>
|
|
|
|
|
|
|
|
|
|
|
|
</settings>
|
|
|
|
|
|
|
|
```
|
|
|
|
##### 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 : 공개키
|
2024-04-27 08:06:38 +00:00
|
|
|
cd
|
|
|
|
|
|
|
|
# 접속 대상서버로 Key 전송
|
|
|
|
ssh-copy-id -i id_rsa.pub -p 11443 root@10.200.31.136
|
2024-04-12 09:43:44 +00:00
|
|
|
|
|
|
|
```
|
|
|
|
- 비공개키 붙여넣기
|
|
|
|
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 버튼
|