簡體   English   中英

Gitlab CI:Docker 在運行測試之前通過 SSH 端口轉發連接到遠程 MySQL

[英]Gitlab CI: Docker connect to remote MySQL via SSH Portforwarding before running tests

我正在嘗試將我的單元測試集成到 Gitlab CI 中,這主要是有效的。

NodeJS 應用程序使用托管在不同服務器上的 MySQL 數據庫(使用: ssh -L 3306:127.0.0.1:3306 username@remoteserver ),我們在本地端口轉發到該服務器,因此,當我們連接到它時,所有測試都在本地通過.

CI 腳本(包含在下面)似乎可以工作,並且測試通過了不需要 mysql 連接的任何函數。 我需要我的 CI 運行程序通過 SSH 連接到遠程服務器,並測試剩余的功能。

但是,我正在努力尋找一種方法,讓我的gitlab-ci.yml腳本在運行測試之前將 SSH(使用公鑰)執行到該遠程服務器並在本地將其轉發到 127.0.0.1。

我也不確定公鑰/私鑰對是在 Docker 內部生成,還是通常在設置 Runner 的機器上生成。

任何人都可以指出我正確的方向嗎?

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

這不是直截了當的,但有一種方法。 GitLab 提供了文檔,甚至是一個示例

你想要做的是:

  1. 生成公鑰/私鑰對
  2. 在您要連接的服務器上,將密鑰的公共部分添加到列出授權密鑰的文件中(通常是~/.ssh/authorized_keys
  3. 在 Gitlab 中,創建一個名為SSH_PRIVATE_KEY的新變量,將密鑰的私有部分作為值
  4. 在您的項目中,修改文件.gitlab-ci.yml以便 Docker 容器使用密鑰的私有部分:

     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 $USER@$HOST << EOF git fetch --all -v git checkout -f dev git reset --hard origin/dev EOF

請注意,在撰寫此答案時,我一直無法保持 SSH 連接處於活動狀態並在那里一個接一個地運行命令。 這就是使用<< EOF背后的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM