이번엔 꽤 복잡했다.
1. phpunit, gitlab-runner 설치
먼저 Laravel의 테스트 자동화를 도와줄 phpunit을 composer.json에 추가해준다.
unit test 자동화를 위해 https://github.com/vigneshc91/laravel-test-generator 패키지를 documentation에 따라
설치하고, 불필요하거나 시스템에 영향을 미칠 수 있는 테스트 항목을 정리하여 셋팅 해 두었다.
추후 gitlab-runner 가 phpunit으로 테스트를 수행하려면 composer.json의 require-dev 항목에 들어있어야 한다.
$ composer require --dev phpunit/phpunit ^8.3
해당 내용을 포함하여 저장소에 push 해 준다.
composer.json에 해당 내용이 없으면 heroku가 에러를 뿜어내게 된다.
다음으로, 어디서도 실행할 수 있도록 apt-get으로도 phpunit을 설치 해 준다.
하는김에 gitlab-runner도 설치 해 준다.
다만 최신버전을 받으려면 https://docs.gitlab.com/runner/install/linux-manually.html 의 내용에 따라,
install 또는 update 를 수행한다.
$ sudo apt-get install phpunit gitlab-runner
이것으로 밑작업 완료.
2. gitlab-runner 설정
gitlab-runner는 gitlab에서 push 이벤트가 발생했을 때, 필요한 환경이나 명령어를 gitlab으로 전달해주는 감시자이다.
프로젝트 루트로 이동하여 gitlab-runner를 등록한다.
$ sudo gitlab-runner register
https://gitlab.com > 프로젝트 페이지 > 설정 > CI/CD > Runners 로 들어간다.
Set up a specific Runner manually 항목을 보면, url과 토큰을 확인할 수 있다. 차례대로 입력 해 준다.
description 입력을 요구하면 프로젝트를 식별할 수 있는 문자열을 적당히 입력 해 주고,
tag 입력을 요구하면 축약된 문자열로 잘 입력한다.
tag는 gitlab-runner와 프로젝트를 매칭시켜주는 중요 요소로 작용하게 된다.
여기서는 my-tag 라고 설정한 것으로 가정한다.
이후는 안내 문구에 따라 필요한 설정을 넣어주면 된다.
3. .gitlab-ci.yml 작성
가장 애먹었던 부분이다.
일단 예제를 보자면 이렇다.
before_script:
- cd /home/fil/workspace/my-project
stages:
- test
- qa
- production
testing:
stage: test
script:
- echo "Unit test started."
- composer install
- phpunit
tags:
- my-tag
only:
- tags
qa:
stage: qa
script:
- echo "Deploy to qa"
- dep deploy qa
tags:
- my-tag
only:
- tags
- qa
deploying:
only:
- master
- tags
stage: production
script:
- echo "Deploy to production"
- cd public
- cd ..
- dep deploy ec2
tags:
- my-tag
before-script 부분은 필요한지 잘 모르겠다. 검색하다보니 저렇게 쓴 사람이 있기에 혹시나 해서 넣어봤다.
stages는 gitlab-ci가 작업을 수행할 공간을 의미하는듯 한데,
stage가 서로 다른 작업은 병렬로 실행된다. 일종의 멀티태스킹으로 생각하면 될것같다.
gitlab의 CI/CD 메뉴를 통해 작업이 실행되는 모습을 콘솔로 지켜볼 수 있는데,
보아하니 docker로 컨테이너를 만들고, 해당 컨테이너에서 지정된 명령들을 수행하는 것 같다.
즉, stage가 다른 작업이 두개 있다면 두 작업을 각각의 컨테이너에서 동시에 실행하는것으로 보면 될듯 하다.
only 부분에는 branch 이름과 태그를 적어 주었다.
deploying 스크립트는 프로덕션 서버에 배포할때 사용할 예정인데,
master 브랜치에 코드가 push 되었을때 & runner가 my-tag에 해당할때만 수행하도록 설정했다.
이후 .gitlab-ci.yml 파일을 origin/master에 push했을때
자동으로 deployer 배포가 실행되어 slack으로 메시지를 받을 수 있었다.
워낙 복잡해서 최대한 간단하게 적었는데, 수정&테스트를 병행하면 잘 될것이라 본다.
1만큼 고생하면 5만큼 할일이 줄어드는 꿀작업이다.
--------------------------------------------- 내용 추가 19.08.20 -----------------------------------------------
gitlab-runner 10 이상 버전에서 "Problem with the SSL CA cert" 오류를 지속적으로 만나야 했다.
검색을 반복한 끝에 아래 해결방법을 찾을 수 있었다.
tls_verify = false
environment = ['GIT_SSL_NO_VERIFY=true']
위 두줄을 /etc/gitlab-runner/config.toml 파일의 [[runners]] 각각에 추가 해 준다.
출처: https://gitlab.com/gitlab-org/gitlab-runner/issues/2859#note_54723535
또는 아래 내용을 .gitlab-ci.yml 파일에 추가해도 된다고 한다.
variables:
GIT_SSL_NO_VERIFY: "true"
gitlab과 gitlab-runner간의 ssl 통신 문제라고 추정하는 듯 하다.
출처: https://gitlab.com/gitlab-org/gitlab-runner/issues/986#note_3262945
'내가 자꾸 까먹어서 쓰는 개발 이야기 > Linux Server' 카테고리의 다른 글
WSL2 에서 Browsersync 사용하기 (0) | 2020.06.10 |
---|---|
Windows 10 Subsystem Linux로 웹서버 구축하기 (0) | 2019.09.20 |
Shell Script로 npm build, git push, deploy 하기 (0) | 2019.07.05 |
Let's encrypt 오류 "couldn’t get currently installed..." on Amazon Linux (0) | 2018.06.14 |
[Ubuntu 16.04] qemu kvm & WebVirtMgr - 생성하기 (0) | 2017.04.25 |
최근댓글