아하
생활
공정한어치87
공정한어치87
21.04.29

gitlab-ci 자동화 방법?

local 환경에서 test code를 관리하고 있습니다 test_url = 'localhost:포트번호' 로 할당하여 잘 돌아갑니다.

gitlab-ci환경에서 작동가능하도록 자동화 전략을 구현하고 싶은데

gitlab-ci 실행 -> docker환경의 localhost실행 ->testcode 실행 ->localhost 종료와 함께 gitlab-ci끝

과 같은 전략을 짜고 싶습니다. runner 이용중입니다. 도움 부탁드리겠습니다.

55글자 더 채워주세요.
2개의 답변이 있어요!
  • 시크한븍극곰184
    시크한븍극곰184
    21.04.30

    안녕하세요, 질문자님.

    GitLab CI로 자동화를 구축중이시군요.

    깃랩의 경우 자체 내장된 git에 소스 커밋시 gitlab-ci.yaml의 정책대로 gitlab runner가 실행되어 원하시는 자동화 구현방안되로 수행할수있습니다.

    stages: - test - deploy test-level: stage: test image: tmaier/docker-compose:latest services: - docker:dind before_script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY script: - docker-compose up -d - docker-compose down --volumes - docker-compose push depoly-level: stage: deploy image: docker:stable services: - docker:dind variables: DOCKER_HOST: tcp://your_docker_host:2376 DOCKER_DRIVER: overlay2 DOCKER_TLS_VERIFY: 1 before_script: - mkdir -pv ~/.docker - mv $CA_PEM ~/.docker/ca.pem - mv $CERT_PEM ~/.docker/cert.pem - mv $KEY_PEM ~/.docker/key.pem - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY script: - docker stack deploy -c docker-compose.yml --with-registry-auth myproject

    제가 테스트로 사용하던 gitlab-ci.yaml입니다.

    $의 변수들은 깃랩에 저장할수있는 기능이고 도커사용시 보안상 ssl을 사용하지않으면 해커의 포트스캐닝을 통해 해당 컨테이너가 탈취될수있습니다.(러너 사용시 docker in docker 이미지를 사용하여 테스트진행하시면됩니다.)

    위 yaml을 설명해드리면 Stage가 두가지가 있는데 단계를 나눠둔것입니다.

    지금은 테스트만하고 바로 deploy서버로 전송하게끔 되어있는데 아마 테스트결과를 반환받아 그결과를 조건문을통해 스테이지 전환이 가능할것입니다.

    아마 위 내용을 참고하셔서 테스트해보시면 금방 확인가능하실것입니다.

  • 안녕하세요. gitlab-ci와 연동해 도커 환경에서 로컬호스트 테스트를 수행하는 방법을 문의하셨군요.

    gitlab-ci에 이미 runner를 등록한 상황으로 보입니다. 남은 과정은 사용 중인 테스트용 도커 이미지를 이용해 테스트를 수행하도록 .gitlab-ci.yml 파일에 테스트 스크립트를 추가하는 것이네요. 다음 링크의 글을 참고하면 좋을 것 같습니다.

    https://hihellloitland.tistory.com/m/65

    위 링크에선 .gitlab-ci.yml에서 실제 테스트를 수행하진 않으며 docker runner 를 이용하는 docker in docker 방식을 사용하고 있지만 전반적인 CI 구성에 대한 참고 자료로 좋습니다.

    간단하게 테스트하고 확인하려면 deploy 단계(stage)에 script 절을 하나 더 추가한 후 curl 등으로 localhost를 호출하고 그 결과를 기록하게 하면 됩니다. 좀 더 지속 가능한 방식을 원한다면 selenium 등의 end-to-end 테스트 도구를 사용하는 테스트 코드를 작성하면 됩니다. 자세한 내용은 gitlab 공식 문서의 end-to-end 테스트 관련 설명 및 예제를 찾아 보시길 바랍니다.

    채택 부탁드립니다. 감사합니다.