我正在尝试将我的单元测试集成到Gitlab CI中,而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
答案 0 :(得分:1)
这不是直截了当的,但有办法。 GitLab提供documentation甚至example。
您想要做的是:
~/.ssh/authorized_keys
)SSH_PRIVATE_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
您的脚本应该能够无缝连接到服务器并在那里运行命令或脚本,例如。($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
背后的原因。