如何在Gitlab-CI Runner上下文中连接到Apache?

时间:2018-10-03 15:29:46

标签: docker continuous-integration gitlab gitlab-ci gitlab-ci-runner

我想连接到在gitlab-ci.yml中创建的Apache(以便运行验收测试),但是我不知道该怎么做。

尝试curl -i http://localhost/给出:

curl: (7) Failed to connect to localhost port 80: Connection refused

gitlab-ci.yml

的内容
image: php:7.0-apache

variables:
 DEBIAN_FRONTEND: noninteractive

before_script:
  - apt-get update -yqq
  - apt-get install -yqq curl net-tools

hello-world:
  stage: test
  script:
  - ./script.sh

script.sh

的内容
#!/usr/bin/env bash

set -e

echo-run() {
    echo "===== ===== $1"
    echo "$($1)"
    echo
}

declare MYHOSTNAME="$(hostname)"

echo-run "hostname"
echo-run "netstat -antup"
echo-run "pwd"
echo-run "ls -al --color=auto ."
echo "curl -i http://${MYHOSTNAME}/"

# This does not work: "failed to connect to <hostname> port 80: Connection refused"
curl -i http://${MYHOSTNAME}/

该项目托管在gitlab.com/matt.faure/debug-ci/,这里是ouput of a failed job

据我了解,这是一个“先启”问题:我在哪个世界?

MYHOSTNAME是Docker容器的主机名,显然,它不起作用,因为它是从 inside 容器中看到的名称,并且IP /端口由Runner映射(或者可能不是)。那么默认映射是什么?如何配置?

(这在常规Docker环境中有效)

我收获了Gitlab Runner doc,但没有成功。我还在Gitlab论坛和StackOverflow上进行了广泛的搜索。我发现了这些类似的问题,但没有一个导致我找到解决方案:

总结,我缺少什么或误解了?

1 个答案:

答案 0 :(得分:2)

您的Apache尚未运行。

您的netstat -antup仅显示外地地址连接,可能是从apt-get之前运行的。

Gitlab Runner启动一个容器来执行您的before_script scriptafter_script,它覆盖了ENTRYPOINTCMD所使用的映像正常启动Apache。

在您的script.sh中添加一个步骤,以在后台运行apache(虽然我不确定,但不确定它是否可以运行),或者只是将apache链接为service,具体取决于您的目标。