我想连接到在我的 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 容器的主机名,显然这不起作用,因为它是从容器内部看到的名称,并且 IP/端口由 Runner 映射(或者可能不是)。那么默认映射是什么?如何配置?
(这适用于常规 Docker 环境)
我收获了Gitlab Runner doc没有成功。我还在 Gitlab 论坛和 StackOverflow 上进行了广泛的搜索。我发现了这些类似的问题,但没有一个让我找到解决方案:
- How are Gitlab CI service ports exposed?
- 已接受 GitLab runner unable to clone repository via http 的答复
- Gitlab runner: Not able to contact running webserver
总结一下,我遗漏或误解了什么?
最佳答案
您的 Apache 没有运行。
您的 netstat -antup
仅显示外部地址连接,可能来自之前运行的 apt-get。
Gitlab Runner 启动一个容器来执行您的 before_script
script
和 after_script
,它会覆盖 ENTRYPOINT
和 CMD
您正在使用的镜像依赖于正常启动 Apache。
在 script.sh 中添加一个步骤以在后台运行 apache(但不确定它是否会起作用,我从未尝试过),或者只是将 apache 链接为 service ,取决于您的目标。
关于docker - 如何在 Gitlab-CI Runner 上下文中连接到 Apache?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52630651/