Print
카테고리: [ macOS & Macintosh ]
조회수: 4300

1. 개요


2. GitLab 설치

2.1. 설치

아래 커맨드는 환경에 맞게 수정한다.

  1. SSH 포트
  2. HTTP 포트
  3. HTTPS 포트
  4. 외부 디렉토리
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로 정했다.

gitlab 2019 11 23 1.17.09

최초 접속 시에는 root 계정 패스워드를 변경해야 한다. 패스워드를 변경하고 다시 접속하면 이런 초기화면이 나온다.

gitlab 2019 11 23 1.29.44

2.4. 계정 생성

계정 생성 과정은 생략한다. 

2.5. 프로젝트 생성

gitlab 2019 11 23 2.21.03

이제 계정과 프로젝트까지 생겼다.

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에서 잘 올라갔는지 확인한다.

gitlab 2019 11 23 5.33.22

3.2. 내부 네트워크에서 Web Hook 허용

지금은 그냥 127.0.0.1에서 다 하는 것이기 때문에 추가 설정이 필요하다. 설정 경로는 /admin/application_settings/network 이다.

관련 내용은 https://docs.gitlab.com/ee/security/webhooks.html 을 참고한다.

gitlab 2019 11 23 10.04.57

체크를 해준다.

gitlab 2019 11 23 10.05.12


4. Jenkins 작업

4.1. Jenkins 설치

Jenkins 설치 작업은 Jenkins 설치 (brew on macOS) 으로 대체한다.

4.2. 플러그인 설치

추가로 Jenkins에서 GitLab Hook을 위한 플러그인을 추가한다. (GitLab과 관련있다 싶은 것 몇개 골라서 깐다)

4.3. Credential 생성

2.6 단계에서 GitLab에서 토큰 하나 받았는데 그 토큰 관련된 Credential을 생성한다.

gitlab 2019 11 24 11.10.28

4.4. 프로젝트 생성

일단 Freestyle로 하나 생성한다. 만약 Maven 빌드를 할 것이면 Maven 관련 플러그인도 설치한다.

gitlab 2019 11 24 11.30.22

gitlab 2019 11 24 11.30.31


5. GitLab에서 Web Hook Integeration

만약 잘 설정했음에도 테스트 시에 404에러가 난다면 Jenkins URL을 127.0.0.1이나 localhost가 아닌 실제 IP를 적용해야 한다.

gitlab 2019 11 24 10.55.03


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') {
        }
    }
}