programing

GitLab CI를 사용하여 로컬에서 테스트를 실행 하시겠습니까?

copyandpastes 2021. 1. 15. 20:15
반응형

GitLab CI를 사용하여 로컬에서 테스트를 실행 하시겠습니까?


GitLab 프로젝트가 GitLab CI에 구성된 경우 로컬에서 빌드를 실행할 수있는 방법이 있습니까?

랩톱을 빌드 "러너"로 바꾸고 싶지 않고 Docker를 활용하고 .gitlab-ci.yml로컬에서 테스트를 실행 하고 싶습니다 (즉, 모두 미리 구성되어 있음). 또 다른 장점은 로컬 및 CI에서 동일한 환경을 사용하고 있다는 것입니다.

다음은 Docker를 사용하여 Travis 빌드를 로컬에서 실행하는 방법 의 예입니다 . GitLab과 비슷한 것을 찾고 있습니다.


몇 달 전부터 다음을 사용하여 가능합니다 gitlab-runner.

gitlab-runner exec docker my-job-name

이 작업을 수행하려면 컴퓨터에 도커gitlab-runner설치 가 모두 필요합니다 .

파일에 image정의 된 키 도 필요 .gitlab-ci.yml합니다. 그렇지 않으면 작동하지 않습니다.

다음은 현재 로컬에서 테스트하는 데 사용하는 줄입니다 gitlab-runner.

gitlab-runner exec docker test --docker-volumes "/home/elboletaire/.ssh/id_rsa:/root/.ssh/id_rsa:ro"

편집 : 당신은 추가 피할 수 --docker-volumes에 기본적으로 설정 키와 함께 /etc/gitlab-runner/config.toml. 자세한 내용은 공식 문서를 참조하십시오 .

주석의 혼란으로 인해 여기에 gitlab-runner --help결과를 붙여 넣으 므로 gitlab-runner가 로컬에서 빌드를 만들 수 있음을 알 수 있습니다.

   gitlab-runner --help
NAME:
   gitlab-runner - a GitLab Runner

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

VERSION:
   1.1.0~beta.135.g24365ee (24365ee)

AUTHOR(S):
   Kamil Trzciński <ayufan@ayufan.eu> 

COMMANDS:
   exec         execute a build locally
   list         List all configured runners
   run          run multi runner service
   register     register a new runner
   install      install service
   uninstall        uninstall service
   start        start service
   stop         stop service
   restart      restart service
   status       get status of a service
   run-single       start single runner
   unregister       unregister specific runner
   verify       verify all registered runners
   artifacts-downloader download and extract build artifacts (internal)
   artifacts-uploader   create and upload build artifacts (internal)
   cache-archiver   create and upload cache artifacts (internal)
   cache-extractor  download and extract cache artifacts (internal)
   help, h      Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --debug          debug mode [$DEBUG]
   --log-level, -l "info"   Log level (options: debug, info, warn, error, fatal, panic)
   --cpuprofile         write cpu profile to file [$CPU_PROFILE]
   --help, -h           show help
   --version, -v        print the version

보시다시피 exec명령은 execute a build locally.

이 프로세스는 자체 머신을 사용하여 도커 컨테이너를 사용하여 테스트를 실행하는 것입니다. 이것은 사용자 지정 러너를 정의하는 것이 아닙니다 . 이렇게하려면 리포지토리의 CI / CD 설정으로 이동하여 설명서를 읽으십시오. 러너가 gitlab.com에서 실행되는 대신 실행되도록하려면 러너에 사용자 지정 및 고유 태그를 추가하고 태그가 지정된 작업 만 실행하고 러너가 담당 할 모든 작업에 태그를 지정해야합니다.


Docker 이미지를 사용하여 Gitlab을 실행하는 경우 : https://hub.docker.com/r/gitlab/gitlab-ce , docker.sock볼륨 옵션으로 로컬 노출하여 파이프 라인을 실행할 수 -v /var/run/docker.sock:/var/run/docker.sock있습니다.. 이 옵션을 Gitlab 컨테이너에 추가하면 작업자가 호스트의 도커 인스턴스에 액세스 할 수 있습니다.


The GitLab runner appears to not work on Windows yet and there is an open issue to resolve this.

So, in the meantime I am moving my script code out to a bash script, which I can easily map to a docker container running locally and execute.

In this case I want to build a docker container in my job, so I create a script 'build':

#!/bin/bash

docker build --pull -t myimage:myversion .

in my .gitlab-ci.yaml I execute the script:

image: docker:latest

services:
- docker:dind

before_script:
- apk add bash

build:
stage: build
script:
- chmod 755 build
- build

To run the script locally using powershell I can start the required image and map the volume with the source files:

$containerId = docker run --privileged -d -v ${PWD}:/src docker:dind

install bash if not present:

docker exec $containerId apk add bash

Set permissions on the bash script:

docker exec -it $containerId chmod 755 /src/build

Execute the script:

docker exec -it --workdir /src $containerId bash -c 'build'

Then stop the container:

docker stop $containerId

And finally clean up the container:

docker container rm $containerId

ReferenceURL : https://stackoverflow.com/questions/32933174/use-gitlab-ci-to-run-tests-locally

반응형