레이블이 DevOps인 게시물을 표시합니다. 모든 게시물 표시
레이블이 DevOps인 게시물을 표시합니다. 모든 게시물 표시

2019년 1월 18일 금요일

GitLab Runner 설치하기



이 문서는 https://docs.gitlab.com/runner/ 의 내용을 옮기면서 필요한 내용을 첨삭하여 만들었습니다.

GitLab Runner?

Gitlab RunnerGo언어로 작성된 GitLab CI와 함께 사용되는 작업수행 프로그램입니다.
CI(Continuous Integration)는 지속적인 통합이라는 개념으로, 지속적으로 변경내용을 통합해야 만하게 되는 시스템을 의미합니다. 대표적인 프로그램으로 젠킨스가 있습니다.


요구사항

GitLab RunnerGo언어로 작성되었기 때문에, 단일 바이너리로 처리되며, 부가적인 추가요소가 필요하지 않습니다. Linux/macOS, Windows를 지원합니다.


기능

  • 다음과 같은 방식의 실행이 가능합니다.
    *
    다수의 작업을 동시에 실행
    *
    서버들에서 다수의 토큰을 사용 가능( 프로젝트 단위로도 가능)
    *
    토큰다 동시수행 작업 제한 가능
  • 작업은 다음과 같이 실행될 수 있습니다.
    *
    로컬
    *
    도커 컨테이너들에서 수행
    *
    도커 컨테이너들에 SSH를 통해서 실행
    *
    다른 클라우드와 가상화 솔루션을 통해서 자동 Scale
    *
    원격 서버에 SSH를 통해 실행
  • Go로 작성되어 단일 바이너리(Go)만있으면 실행이 가능하고 다른 추가 요구사항이 없습니다.
  • BashWindowsbatch 파일과 Powershell을 지원합니다.
  • Linux / macOS와 윈도우를 지원합니다. ( docker가 실행가능하다면 어디든.. )
  • 작업의 실행환경을 설정 할 수 있습니다.
  • 재시작 없이 설정을 자동으로 읽어들입니다.
  • DockerDocker-SSH, 패럴럴즈 혹은 SSH 실행환경에서 설치가 용이합니다.
  • Docker 컨테이너들의 캐시를 지원합니다.
  • 윈도우와 Linux / MacOS에서 서비스모드의 설치가 쉽습니다.
  • 내장 모니터링 시스템을 제공합니다


설치는 그냥 설치하거나, Docker를 통해서 설치하거나 어느쪽을 선택하셔도 무방합니다. 개인적인 선택으로는 Docker를 더 선호하기는 합니다.

Ubuntu설치하기




사전요구사항

Docker를 사용하고 싶다면, Docker를 먼저 설치해야 합니다. 기본적으로는 사전 요구사항이 없습니다.


Runner 설치하기(Docekr가 아닌 경우)

다음과 같은 과정을 통해서 설치할 수 있습니다.


1. 레파지토리 추가하기
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash


2. 패키지 설치(최종 버전 설치)
sudo apt install gitlab-runner


3. 특정 버전 설치
apt-cache madison gitlab-runner
sudo apt install gitlab-runner=10.0.0


설치 자체는 여기서 완료됩니다.


업데이트하기 (Docker가 아닌 경우)

마지막 버전으로 업데이트를 하고 싶으면 아래와 같이 수행하면 됩니다.
sudo apt update
sudo apt install gitlab-runner


Docker ContainerGitLabRunner 실행하기



일반적인 gitlab runner docker image 사용법

보통의 gitlab-runner 명령은, 아래와 같이 실행합니다.
gitlab-runner [Runner command and options...]


이것을 container를 통해서 실행시키려면 다음과 같이 하면됩니다.
docker run [chosen docker options...] gitlab/gitlab-runner [Runner command and options...]


예를 들어 gitlab-ruuner--help를 실행하고자 한다면 아래와 같이 실행하게 됩니다.
docker run --rm -t -i gitlab/gitlab-runner --help


---------------------------------실행 결과 --


NAME:
gitlab-runner - a GitLab Runner


USAGE:
gitlab-runner [global options] command [command options] [arguments...]


VERSION:
10.7.0 (7c273476)


(…)
---------------------------------
실행 결과 –

Docker 이미지 설치하고 설정하기

  1. 먼저 docker를 설치하기 위해서 다음과 같이 실행 합니다.

    curl -sSL https://get.docker.com/ | sh


  2. 컨테이너를 외부 Volume과 연결하여 실행하기 위해서 다음과 같이 입력합니다.

    docker run -d --name gitlab-runner --restart always \
    -v /srv/gitlab-runner/config:/etc/gitlab-runner \
    -v /var/run/docker.sock:/var/run/docker.sock \
    gitlab/gitlab-runner:latest
  3. 혹은 설정 컨테이너를 아래와 같이 생성할 수도 있습니다.
    docker run -d --name gitlab-runner-config \
    -v /etc/gitlab-runner \
    busybox:latest \
    /bin/true
    이제 runner를 실행 시킵니다.
    docker run -d --name gitlab-runner --restart always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    --volumes-from gitlab-runner-config \
    gitlab/gitlab-runner:latest
여기까지 수행하게 되면 기본적인 Docker의 이미지 설치는 완료된 상태입니다.


Docker 이미지 업데이트 하기

최종 버전으로의 이미지 업데이트
docker pull gitlab/gitlab-runner:latest


실행 중인 컨테이너를 중지하고 삭제
docker stop gitlab-runner && docker rm gitlab-runner


갱신된 이미지를 재시작(이때 설정환경등의 데이터 영역은 그대로 사용)
docker run -d --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
gitlab/gitlab-runner:latest


이제 공통적으로 사용되는 GitLab Runner를 등록하는 방법을 알아보겠습니다.


GitLab에 등록하기



사전 요구사항 :

  1. GitLab Instance와 분리하여 설치된 GitLab Runner가 필요합니다.
  2. GitLab 인스턴스에서 정의된 token 이 필요합니다.


위의 화면은 관리자 로그인 후에 Admin Area/Runners를 선택한 상태입니다.
우리에게 필요한 두가지의 정보가 여기에 있습니다.
위의 그림에서, 첫번째 지워진 정보가 설치 URL, 두번째가 Token 입니다.
설정 과정에서 두가지의 정보를 사용합니다.

등록하기 :

  1. 등록하기 위해서 다음의 명령어를 실행합니다.
    sudo gitlab-runner register


  2. 설치된 GitLabURL을 입력합니다.
    Please ener the gitlab-ci coordinator URL(e.g. https://gitlab.com)
    http://????????/ ←
    앞의 홈페이지에서 첫번째 값


  3. 홈페이지에서 제공한 Token을 입력합니다.
    Please enter the gitlab-ci token for this runner
    ???? ←
    앞의 홈페이지에서 확인한 두번재 값


  4. Gitlab UI에서 이 Runner를 식별할 명칭을 입력합니다.
    Please enter the gitlab-ci description for this runner
    [hostname] my-runner
  5. Runner에 대한 Tag를 입력합니다.
    Please enter the taglab-ci tags for this runner
    my-tag,another-tag


  6. 실행기의 형식(executor)를 입력합니다.
    Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
    docker
    위의 예에서는 실행기의 형식을 docker로 지정하였습니다. 이렇게 하기 위해서는 먼저 Docker를 설치해야 합니다. Docker설치에 관한 부분은 인터넷에서 확인하시기 바랍니다.

  7. Docker를 골랐다면, 기본 이미지를 정의합니다. (.gitlab-ci.yml에서 정의하지 않은 경우)
    Please enter the Docker image (eg. Ruby:2.1):
    alpine:latest
    여기서는 alpine 리눅스의 최신 버전이미지로 지정해 두었습니다.


정상적으로 등록이 되었다면, Admin Area/Runners 가 아래와 같이 변경됩니다.
Gitlab Runner List
기본 설정값은 자동으로 lock이 결려 있는 상태이며, 이를 해소하기 위하여 상세 페이지에 들어가서 (위의 그림에서 RunnerToken을 클릭)하여 설정을 아래와 같이 변경해줍니다.


GitLab Runner Detail Info
위의 설정과 같이 Lock to current Projectcheck를 해제하고, Run untagged jobs를 설정해 줍니다.

다음 글에서는 간단히 Project를 생성하여 Runner을 통해 실행 시키는 것을 살펴 보겠습니다.

2019년 1월 8일 화요일

GitLab Install without Docker

이 글의 내용은 다음의 사이트를 참조하였습니다.
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-gitlab-on-ubuntu-18-04
참고로 Digital Opcean은 해외의 유명한 VPS업체입니다.
GitLab의 하드웨어 요구사항은 사용자의 수와 연관이 있습니다.
최소 사양은 (100user를 가정)
1 core4Gbyte RAM + 4GB Swap 입니다.
자세한 하드웨어 요구 사항은 여기를 참고하시기 바랍니다.

의존성 패키지들의 설치.

다음과 같은 명령어를 입력하여, GitLab이 필요로 하는 패키지를 설치합니다.



$ sudo apt update
현재 패키지 정보(/etc/apt/sources.list)를 업데이트 합니다.
$ sudo apt install ca-certificates curl openssh-server postfix
다음의 패키지를 설치 합니다.
Ca-certificates : 인증기관의 인증서 모음입니다.
curl : 명령행에서 url통신을 수행하는 프로그램 입니다.
Openssh-server : Secure Shell 접속을 제공하는 서버 프로그램입니다.
Postfix : SMTP 서버입니다.

GitLab 설치




다음과 같은 명령을 입력하여 설치를 수행합니다.
$ cd /tmp
→ 해당 스크립트를 다운로드 합니다.
$ sudo bash / tmp/script.deb.sh
→ 스크립트의 내용을 살펴보면, 레파지토리에 원격 주소를 추가하고, apt update를 수행합니다. 스크립트를 수행하고 나면, apt 명령으로 gitlab을 설치할 준비가 끝났습니다.
$sudo apt install gitlab-ce
→ 실제로, Gitlabcommunity-edition을 설치합니다.


방화벽 설정

저의 경우는 이 부분이 문서와 조금 달랐습니다. 제 경우를 정리하겠습니다.
(이 차이는, digital ocean의 기본 설정이미지와 저의 설치 환경의 차이로 생각 됩니다.)


먼저 설정을 확인합니다.
$ sudo ufw status
→ 원본 문서와는 다르게, 저는 다음과 같은 상태로 출력 되었습니다.
Outout
Status : inactive


우선 설정을 다음과 같이 입력하여, 설정을 병경해 줍니다.
뒤의 명령에 사용되는 단어(http,https,ssh)/etc/services 파일에 지정되어 있습니다.
다음과 같이 시스템의 포트를 설정합니다.
$ sudo ufw allow http
→ http
의 외부 접속을 허용합니다.
$ sudo ufw allow https
https의 외부 접속을 허용합니다.
$ sudo ufw allow ssh
ssh의 외부 접속을 허용합니다.
최종적으로 방화벽을 활성화 합니다. 다음과 같이 입력하십시오.
$ sudo ufw enable


GitLab 설정파일 수정



설정 파일은 설치가 기본값 대로 되었다면, /etc/gitlab/gitlab.rb에 파일이 있을 것입니다.
우선 최소한의 설정만을 변경합니다.
좋아하는 편집기로, 이 파일의 external_url 항목을 수정합니다.
이 설정의 변경은 화면에 보여지는 사이트의 명칭을 지정합니다.
external_url ‘https://example.com
→ 이 부분을 원하는 url로 변경해 줍니다. (dns명이 없는 상황이라면, ip로 입력해도 무방합니다.)
이 이외의 항목들은, 설정파일안의 내용을 참조하시기 바랍니다.
파일을 저장하고 , 설정을 반영하기 위하여, 다음과 같이 입력합니다.
$ sudo gitlab-ctl reconfigure
이 과정이 수행되는 데는 꽤 오랜 시간이 소요됩니다.


이후의 과정은 docker를 통해서 설치한 경우와 같습니다.

2019년 1월 6일 일요일

Gitlab Dashboard



gitlab에 처음 설정한 root 사용자로 로그인 하게되면, Dashboard 화면이 다음과 같이 나타납니다
Dashboard 화면은 아래와 같습니다
 

사용자 관리(Add Project)

git에 접근할 수 있는 사용자를 생성하고 관리 합니다.

GitServer에 접근할 사용자를 추가할 수 있습니다. 사용자가 관리자 인지 여부를 결정하고, 외부 사용자인지 내부사용자인지를 결정할 수 있습니다.
사용자 계정에서 기본적으로는 메일을 통하여 비밀번호 초기화 링크를 제공하고, 처음 로그인시에 비밀번호를 설정하게 하지만 – 애석하게도 기본값으로 설정을 하면 메일 계정이 설정되지 않아 해당 기능이 정상적으로 동작하지 않습니다.


이 경우에는 사용자를 우선 추가하고, 관리자 권한으로 직접 비밀번호를 지정(ex – 기본 비밀번호)해주고 사용자 설정에서 다음 로그인에 비밀번호 변경을 하도록 설정하는 것이 좋습니다.
현재 이 글에서 설명하는 기준은, 내부에서, 외부의 추가 리소스 없이(SMTP 역시 추가리소스라고 생각합니다. ) 관리하는 것을 기준으로 설명하고 있습니다.

사용자 그룹(Create a Group)

사용자를 그룹으로 묶어서 관리하면, 좀 더 편리합니다.

그룹의 명칭을 결정하고, 그룹에 대한 외부 노출 여부를 설정할 수 있습니다.

프로젝트 관리(Create a Project)

프로젝트를 생성합니다.
프로젝트는 사용자 하단에서 Blank로 부터 생성하거나, 기존에 제공되는 Template을 기반으로 만들거나, 이미 관리되고 있는 외부 프로젝트로 부터 시작할 수 있습니다.


Gitlab 설정 (Configure GitLab)


다양한 환경설정이 가능합니다만, 해당 설정화면에서 설정가능한 것은 지극히 제한적이며, SMTP같은 부분들은 실제 환경설정 파일에서 지정합니다.



보통의 경우라면(저희가 가정한 경우를 의미합니다.) 사용자를 사전에 신청받아서 관리하고자 하는 경우가 많을 것입니다. 그런 경우에는 사용자 등록 (Sign-up restrictions)에서 사용자 등록을 사용하지 않도록 수정하시기를 추천합니다.



실제 GIT의 사용은 많은 정보들이 있으므로, 별도로 언급하지 않습니다.
프로젝트를 생성하시면, 해당 프로젝트의 checkout 정보가 자동으로 만들어집니다.
예를 기준으로 생성한 프로젝트의 화면을 보시면 이해하실 수 있을 것입니다.


여기서 주의할 부분이 하나 있습니다.
현재 이문서에서 언급하는 방법은, docker하에서 시스템을 구현했다고 가정하고 만들어진 것입니다.
따라서, httphttps로 지정을 하거나, 기존 시스템에서 ssh이외의 포트로 설정을 변경하신 경우에는, 레파지토리 URL에 해당 포트를 추가해 주셔야 합니다.



다음 글에서는 SMTP를 설정하는 방법에 대해서 간략하게 살펴보겠습니다.

2019년 1월 2일 수요일

gitlab 알아보기, 독립 설치버전 설치

작년 중순 Microsoft가 Github를 인수하면서,
사람들은 많은 고민에 빠졌습니다.


과연 MS가 github에 크게 손을 대지 않지 않을까 하는 우려? 섞인 반응이었습니다.

개인적으로 작은 몇 개의 프로젝트를 (물론 아무도 거들떠 보지 않습니다.)하고 있는 사람으로서 살짝 신경이 쓰인 건 사실입니다.

그래서 대안을 찾던 중..gitlab이 있는 것을 발견했습니다.
하지만 대부분의 경우 그러하듯이.. 클라우드나 외부영역에 소스가 존재하는 것을 원하지 않으시는 분들도 있습니다. (개인 프로젝트라면 상관없지만, 고객사 프로젝트등의 경우)

개인 프로젝트 같은 경우 부담없이 계정을 만들고 작업을 해도 무방하다고 판단했습니다.

 http://gitlab.com/

개인 프로젝트라면, 이 이외에도 대안은 많습니다. (bitbucket등등..)


외부 인터넷이 원할하시고, 망보안/소스보안에 문제가 되지 않는다면, 위의 사이트를 직접 사용하시는 것이 가장 단순하고 쉬울 것 같습니다.

만약 그렇지 않다하더라도, 설치형 패키지를 제공합니다.
단! Gitlab Community Edition을 설치해 보시기를 권장합니다.

개인적인 결정으로 저는 개발머신에 docker로 gitlab을 설치하기로 마음 먹었습니다.
gitlab은 일반적인 형상관리 이외에도 CI/CD를 결합해 줌으로서 DevOps이라고 보시는 것이 더 좋습니다.

아래의 모든 행위는 ubuntu 18.04 (LTS)에서 수행하였음을 알려드립니다. 인터넷도 원할히 연결되어 있는 상태입니다. (아니라면. 인터넷이 되는 곳에서 해당 행위를 수행하고, 머신을 옮기거나, 미리 로컬에 이미지를 구축해두는 방법도 있습니다. ) 

먼저 docker를 설치하도록 합니다.
1. sudo apt update
-> 설치 전에 현재 apt list를 최신으로 갱신합니다.
2. sudo apt install docker.io
-> docker를 실제로 설치합니다.
3. sudo usermod -aG docker $USER
-> 기본 설정값으로는 , 로그인 사용자에게 docker 대한 실행 접근 권한이 없어서, 여러가지 문제가 발생합니다. 이를 해결하기 위하여, 사용자에게 권한을 주는 명령입니다.

4. sudo apt install docker-compose
(선택사항) docker-compose를 설치합니다.

docker의 설치가 끝났으니, 이제 gitlab을 설치하도록 하겠습니다.

1) docker-compose가 없는 경우.

docker run --detach \
    --hostname $HOST_IP \
    --publish $HOST_SSL_PORT:443 \
    --publish $HOST_HTTP_PORT:80 \
    --publish $HOST_SSH_PORT:22 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    --volume /srv/backups:/var/opt/backups \
    gitlab/gitlab-ce:latest

docker는 반가상화인 관계로 호스트와의 설정에 관련된 부분을 아래와 같이 설정해 줘야합니다. 

위의 내용에서,
$HOST_IP : 호스트 리눅스 머신의 IP
$HOST_SSL_PORT : docker의 SSL을 호스트에서 노출할 Port
$HOST_HTTP_PORT : docker의 웹접속(without SSL)을 호스트에서 노출할 포트
$HOST_SSH_PORT : docker의 SSH를 호스트에서 노출할 포트

이 부분을 숫자와 IP 주소로 바꾸어 입력하시고 실행하시면 됩니다.

2) docker-compose를 설치한 경우.

임의의 디렉토리에 docker-compose.yml 파일을 생성하고
아래의 내용을 작성하여 넣습니다.

---- 파일 내용 시작 ---
 web:
   image: 'gitlab/gitlab-ce:latest'
   restart: always
   hostname: '$HOST_IP'
   container_name: gitlab
   ports:
     - '$HOST_HTTP_PORT:80'
     - '$HOST_SSL_PORT:443'
     - '$HOST_SSH_PORT:22'
   volumes:
     - '/srv/gitlab/config:/etc/gitlab'
     - '/srv/gitlab/logs:/var/log/gitlab'
     - '/srv/gitlab/data:/var/opt/gitlab'
     - '/srv/backups:/var/opt/backups'    
---- 파일 내용 끝 ----

각 항목의 내용은 1)일 때와 같습니다.
해당 디렉토리로 이동 후, 아래의 명령을 수행합니다.

docker-compose up -d

* 실행 확인하기,
애석하게도, gitlab은 그렇게 간단하고 가벼운 솔루션은 아닙니다.

명령줄에서 다음과 같이 입력하여, 실행 상태를 확인합니다.

docker ps -a

status가 healthy으로 바뀌기 전에는 서버 구동 작업 중이라고 생각하시면 됩니다.
(저의 테스트 머신에서는 약 3분 정도가 소요되었습니다.)

running 상태로 바뀌고 나면, 지정한 port로 접속합니다.
해당 server의 지정한 port로 접속하여 웹사이트가 화면에 나오면, 정상적으로 설치가 된 것입니다. 

이 때 화면에서는 비밀번호 설정을 요구하는 화면이 출력되는데, 이 비밀번호는 전체 관리자의 비밀번호입니다.

설치시에도 변경은 가능하지만, 스크립트에 해당 내용을 직접 기입해야 하는 문제가 있으므로, 이 방식을 더 추천합니다.

 모든 과정을 거치고 나면 다음과 같은 화면이 출력 됩니다.

Gitlab Login
초기 로그인 페이지

이제 상세한 설정이 남았습니다.
다음 글에서 계속 하겠습니다.


쿠버네티스 네트워크 정리

본 문서는 쿠버네티스의 공식문서( https://kubernetes.io/docs/concepts/cluster-administration/networking/ )의 일부를 번역하고 링크를 정리하여 붙이는 것에서 시작한 문서입니다. 일부 링크는 ...