我正在尝试将我的单元测试集成到主要工作的 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 提供 documentation甚至是 example .
你想做的是:
~/.ssh/authorized_keys )SSH_PRIVATE_KEY 的新变量将 key 的私有(private)部分作为值 .gitlab-ci.yml以便 Docker 容器使用 key 的私有(private)部分: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
$HOST 和 $USER 也是 secret 变量):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 的原因。 .




