Gitlab CI:Docker在运行测试之前通过SSH端口转发连接到远程MySQL
我正在尝试将我的单元测试集成到Gitlab CI中,它基本上是有效的 NodeJS应用程序使用托管在不同服务器上的MySQL数据库(使用:Gitlab CI:Docker在运行测试之前通过SSH端口转发连接到远程MySQL,docker,ssh,gitlab-ci,Docker,Ssh,Gitlab Ci,我正在尝试将我的单元测试集成到Gitlab CI中,它基本上是有效的 NodeJS应用程序使用托管在不同服务器上的MySQL数据库(使用:ssh-L 3306:127.0.0.1:3306)username@remoteserver)我们在本地端口转发到它,因此,当我们连接到它时,所有测试都在本地通过 CI脚本(包括在下面)似乎可以工作,并且测试可以传递任何不需要mysql连接的函数。我需要我的CI runner通过SSH连接到远程服务器,并测试其余的功能 但是,我正在努力找到一种方法,让我的g
ssh-L 3306:127.0.0.1:3306)username@remoteserver
)我们在本地端口转发到它,因此,当我们连接到它时,所有测试都在本地通过
CI脚本(包括在下面)似乎可以工作,并且测试可以传递任何不需要mysql连接的函数。我需要我的CI runner通过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甚至提供了一个 您要做的是:
~/.ssh/authorized\u keys
)SSH\u PRIVATE\u KEY
的新变量,将密钥的私有部分作为值.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
请注意,在编写此答案时,我无法保持SSH连接处于活动状态并在那里逐个运行命令。这就是为什么要使用
您好,谢谢您的详细回复!现在我有周末的时间来尝试并让它工作!我会很快报告的。这是一个好办法。我必须做的一件事是将公钥也添加为部署密钥,因为我得到了一个主机密钥检查错误。我还在关键行之后添加了“| | exit 1”(特别是在进入npm的部署/发布阶段),以在出现任何错误时强制使构建阶段失败
deploy-dev:
stage: deploy
script:
- |
ssh -t $USER@$HOST << EOF
git fetch --all -v
git checkout -f dev
git reset --hard origin/dev
EOF