2017-02-01 1 views
1

주로 단위 테스트를 Gitlab CI에 통합하려고합니다.Gitlab CI : Docker가 SSH를 통해 원격 MySQL에 연결합니다. 테스트를 실행하기 전에 포트 포워딩

NodeJS 응용 프로그램은 로컬로 포트를 전달하는 다른 서버 (예 : ssh -L 3306:127.0.0.1:3306 [email protected])에서 호스팅되는 MySQL 데이터베이스를 사용하므로 모든 테스트가 연결되는대로 로컬로 전달됩니다.

CI 스크립트 (아래 포함)는 작동하는 것으로 보이며 테스트는 mysql 연결이 필요없는 모든 기능을 전달합니다. 원격 서버에 SSH를 사용하려면 CI 러너가 필요하며 나머지 기능은 테스트 해 보겠습니다.

그러나 gitlab-ci.yml 스크립트에서 공개 키를 사용하여이 원격 서버에 내 gitlab-ci.yml 스크립트를 실행하고 테스트를 실행하기 전에 127.0.0.1로 로컬 포트 ​​포워딩을 수행하는 방법을 찾기 위해 고심하고 있습니다.

공용/개인 키 쌍이 Docker 내부에서 생성되는지 또는 일반적으로 러너가 설정된 컴퓨터에서 생성되는지 여부에 대해서도 확신 할 수 없습니다.

누구나 올바른 방향으로 나를 가리킬 수 있습니까?

image: node:7.4 

before_script: 
    - apt-get update -qy 
    - npm install -g mocha chai assert mysql require moment 
stages: 
    - test 

test_job: 
    stage: test 
    tags: ["mySpecificRunner"] 
    script: 
    - npm run test 

    environment: 

    only: 
    - development 

답변

1

이것은 간단하지 않지만 방법이 있습니다. GitLab은 documentation과 심지어 example을 제공합니다.

싶은 것은 :

  1. , 당신은 연결하려는 서버에서 공개/개인 키 쌍
  2. 생성 권한이 부여 된 사람을 나열하는 파일에 키의 공개 부분을 추가 (일반적으로 ~/.ssh/authorized_keys) Gitlab에서
  3. , 수정 그래서 파일 .gitlab-ci.yml을 프로젝트에 값
  4. 같은 키의 개인 부분 SSH_PRIVATE_KEY라는 새로운 변수를 만들 도커 컨테이너 유 SES 키의 개인 부분 :

    image: debian:latest 
    
    before_script: 
    # install & run ssh-agent 
    - apt-get -qq update -y 
    - apt-get -qq install openssh-client -y 
    # setup the private key 
    - eval $(ssh-agent -s) 
    - ssh-add <(echo "$SSH_PRIVATE_KEY") 
    - mkdir -p ~/.ssh 
    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config 
    
  5. 당신 스크립트는 다음 예를 ($HOST$USER도 비밀 변수) 서버에 원활하게 연결하고이 명령 또는 스크립트를 실행 할 수 있어야한다 :

    deploy-dev: 
        stage: deploy 
        script: 
        - | 
        ssh -t [email protected]$HOST << EOF 
         git fetch --all -v 
         git checkout -f dev 
         git reset --hard origin/dev 
         EOF 
    

이 답변을 쓰는 ​​시점에서 SSH 연결을 활성화 상태로 유지하고 명령을 하나씩 실행할 수 없었습니다. 그것이 << EOF 뒤에있는 이유입니다.

+0

안녕하세요. 자세한 답변을 보내 주셔서 감사합니다. 이제 주말에이 도구를 사용해보세요! 곧 다시보고 할 것입니다. – user5156141

+0

이것은 대우를합니다. 한 가지해야 할 것은 공개 키를 배포 키로 추가하는 것입니다. 호스트 키 확인 오류가 발생했습니다. 또한 중요한 라인 뒤에 "|| exit 1"을 추가합니다 (특히 npm에 도달 할 때 배포/게시 단계에서). 잘못된 것이 있으면 빌드 단계를 강제로 실패합니다 – user5156141

관련 문제