我想连接到在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上进行了广泛的搜索。我发现了这些类似的问题,但没有一个导致我找到解决方案:
总结,我缺少什么或误解了?
答案 0 :(得分:2)
您的Apache尚未运行。
您的netstat -antup
仅显示外地地址连接,可能是从apt-get之前运行的。
Gitlab Runner启动一个容器来执行您的before_script
script
和after_script
,它覆盖了ENTRYPOINT
和CMD
所使用的映像正常启动Apache。
在您的script.sh中添加一个步骤,以在后台运行apache(虽然我不确定,但不确定它是否可以运行),或者只是将apache链接为service,具体取决于您的目标。