【发布时间】:2019-12-15 04:58:56
【问题描述】:
我正在使用 CloudFoundry 部署我的服务,我的 E2E 测试是使用 Postman(CLI 上的 Newman)完成的。情况是我无法直接从我的 GitLab CI/CD 访问某些服务,然后我需要创建一个 SSH 隧道 (cf ssh) 以便能够在 CI/CD 管道期间通过隧道执行 Postman 集合。
这是我的 Dockerfile:
FROM my-private-registry/cf-cli-image
COPY ./images/cf-ssh-tunnel-service/docker-entrypoint.sh /docker-entrypoint.sh
EXPOSE 9001
ENTRYPOINT ["/docker-entrypoint.sh"]
这是docker-entrypoint.sh:
#!/bin/bash
set -eo pipefail
# usage: file_env VAR [DEFAULT]
# ie: file_env 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
file_env() {
local var="$1"
local fileVar="${var}_FILE"
local def="${2:-}"
if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then
echo >&2 "error: both $var and $fileVar are set (but are exclusive)"
exit 1
fi
local val="$def"
if [ "${!var:-}" ]; then
val="${!var}"
elif [ "${!fileVar:-}" ]; then
val="$(< "${!fileVar}")"
fi
export "$var"="$val"
unset "$fileVar"
}
file_env 'CF_SSH_SERVICE_APP_NAME'
file_env 'CF_SSH_SERVICE_REMOTE_PORT' 8080
CF_SSH_SERVICE_LOCAL_PORT=9001
echo "Logging in ..."
cf login -a $CF_URL -u $CF_DEPLOY_USER -p $CF_DEPLOY_PASSWORD -o $CF_ORG -s $CF_SPACE --skip-ssl-validation
cf target
echo "Creating the CF SSH Tunnel to $CF_SSH_SERVICE_APP_NAME:$CF_SSH_SERVICE_REMOTE_PORT though the local port $CF_SSH_SERVICE_LOCAL_PORT."
cf ssh -k -T -N $CF_SSH_SERVICE_APP_NAME -L $CF_SSH_SERVICE_LOCAL_PORT:0.0.0.0:$CF_SSH_SERVICE_REMOTE_PORT
echo "DONE!"
最后这就是我在 GitLab 管道中将图像用作服务的方式:
stages:
- e2e-test
newman:test:development:
image: my-private-registry/curl-image
stage: e2e-test
services:
- name: my-private-registry/cf-ssh-tunnel-service:latest
alias: cf-ssh-tunnel-service
variables:
CF_SSH_SERVICE_APP_NAME: $APP_NAME
script:
- curl http://cf-ssh-tunnel-service:9001/endpoint
如您所见,我正在基于该图像创建服务。然后当我运行管道时,curl 请求返回一个Could not resolve host: cf-ssh-tunnel-service。
问:如何创建 Docker 映像以用作 GitLab 中的服务?
问:我应该如何创建 CF SSH 隧道作为 GitLab 的监听服务?
【问题讨论】:
-
您能否更新您的帖子以包含失败的作业输出?这是否显示了您从服务中获得的一些“回声”声明?另外,鉴于入口点脚本中的所有环境变量,我假设您将 GitLab CI 中的这些环境变量设置为秘密变量?启用调试也可能会有所帮助 - docs.gitlab.com/ee/ci/variables/#debug-tracing
标签: docker gitlab gitlab-ci cloud-foundry ssh-tunnel