1. 개요
2. GitLab 설치
2.1. 설치
아래 커맨드는 환경에 맞게 수정한다.
- SSH 포트
- HTTP 포트
- HTTPS 포트
- 외부 디렉토리
sudo docker run --detach \ --hostname gitlab.mymac.com \ --publish 8843:443 --publish 8888:80 --publish 8822:22 \ --name gitlab \ --restart always \ --volume /Users/intersection3/Docker/gitlab/config:/etc/gitlab \ --volume /Users/intersection3/Docker/gitlab/logs:/var/log/gitlab \ --volume /Users/intersection3/Docker/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest
2.2. 확인
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1bf91d45f8a5 gitlab/gitlab-ce:latest "/assets/wrapper" 44 minutes ago Up 44 minutes (healthy) 0.0.0.0:8822->22/tcp, 0.0.0.0:8888->80/tcp, 0.0.0.0:8843->443/tcp gitlab
2.3. 접속
처음에 HTTP 포트는 8888로 정했다.
최초 접속 시에는 root 계정 패스워드를 변경해야 한다. 패스워드를 변경하고 다시 접속하면 이런 초기화면이 나온다.
2.4. 계정 생성
계정 생성 과정은 생략한다.
2.5. 프로젝트 생성
이제 계정과 프로젝트까지 생겼다.
2.6. 토큰 생성
User Settings -> Access Token에서 Jenkins가 사용할 토큰을 생성한다. 토큰은 꼭 잘 기록한다.
3. 소스 코드 푸시
3.1. git
이제 내 소스를 GitLab에 커밋해보자. 당연히 커밋할 소스 코드는 준비되어 있어야 한다.
$ git config --global user.name "intersection3"
$ git config --global user.email "이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다."
$ git init Initialized empty Git repository in /Users/intersection3/eclipse-workspace/santa/.git/ $ git add . $ git commit -m "first" [master (root-commit) a9342e0] first 10 files changed, 718 insertions(+) create mode 100644 .gitignore create mode 100644 .mvn/wrapper/MavenWrapperDownloader.java create mode 100644 .mvn/wrapper/maven-wrapper.jar create mode 100644 .mvn/wrapper/maven-wrapper.properties create mode 100755 mvnw create mode 100644 mvnw.cmd create mode 100644 pom.xml create mode 100644 src/main/java/com/intersection3/santa/SantaApplication.java create mode 100644 src/main/resources/application.properties create mode 100644 src/test/java/com/intersection3/santa/SantaApplicationTests.java $ git remote add origin http://localhost:8888/intersection3/santa.git $ git push -u origin master Username for 'http://localhost:8888': intersection3 Password for 'http://intersection3@localhost:8888': Enumerating objects: 26, done. Counting objects: 100% (26/26), done. Delta compression using up to 4 threads Compressing objects: 100% (16/16), done. Writing objects: 100% (26/26), 52.41 KiB | 13.10 MiB/s, done. Total 26 (delta 0), reused 0 (delta 0) To http://localhost:8888/intersection3/santa.git * [new branch] master -> master Branch 'master' set up to track remote branch 'master' from 'origin'.
GitLab에서 잘 올라갔는지 확인한다.
3.2. 내부 네트워크에서 Web Hook 허용
지금은 그냥 127.0.0.1에서 다 하는 것이기 때문에 추가 설정이 필요하다. 설정 경로는 /admin/application_settings/network
이다.
관련 내용은 https://docs.gitlab.com/ee/security/webhooks.html 을 참고한다.
체크를 해준다.
4. Jenkins 작업
4.1. Jenkins 설치
Jenkins 설치 작업은 Jenkins 설치 (brew on macOS) 으로 대체한다.
4.2. 플러그인 설치
추가로 Jenkins에서 GitLab Hook을 위한 플러그인을 추가한다. (GitLab과 관련있다 싶은 것 몇개 골라서 깐다)
4.3. Credential 생성
2.6 단계에서 GitLab에서 토큰 하나 받았는데 그 토큰 관련된 Credential을 생성한다.
4.4. 프로젝트 생성
일단 Freestyle로 하나 생성한다. 만약 Maven 빌드를 할 것이면 Maven 관련 플러그인도 설치한다.
5. GitLab에서 Web Hook Integeration
만약 잘 설정했음에도 테스트 시에 404에러가 난다면 Jenkins URL을 127.0.0.1이나 localhost가 아닌 실제 IP를 적용해야 한다.
6. Pipeline
pipeline { agent any tools { maven "maven3.6.2" jdk "openjdk8u40" } environment { REPO_URL = "...." } stages { stage('Init') { step { sh ''' echo "M2_HOME = ${M2_HOME}" ''' } } stage('Build') { step { sh 'mvn -Dmaven.test.failure.ignore=true install' } } stage('Docker Build') { step { sh ''' cp "${WORKSPACE}/target/${JAR_FILENAME}" ${WORKSPACE}/" docker build -t ${IMAGE_NAME} . --build_args JAR_FILE=${JAR_FILENAME} docker login .... docker push ${IMAGE_NAME} ''' } } stage('Deploy') { } } }