SLO*_*OBY 11 continuous-integration imap docker gitlab-ci gitlab-ci-runner
我有一个.gitlab-ci.yml文件:
integration_test:
services:
- name: registry.gitlab.com/group/project/testmailserver:1.1
alias: "mail.email"
stage: test
script:
- ./gradlew -g /cache/.gradle --stacktrace --info integrationTest
Run Code Online (Sandbox Code Playgroud)
该服务是基于此的完整堆栈电子邮件服务器:tvial/docker-mailserver:latest.在我的docker-compose配置本地,我能够运行它并连接到它.
version: '2'
services:
mail:
image: registry.gitlab.com/group/project/testmailserver:1.1
hostname: mail
domainname: localhost
ports:
- "25:25"
- "143:143"
- "587:587"
- "993:993"
environment:
- ONE_DIR=1
- DMS_DEBUG=0
- MAIL_USER=invoicereader
- MAIL_PASS=invoicereader
cap_add:
- NET_ADMIN
Run Code Online (Sandbox Code Playgroud)
如果我运行它docker-compose up并通过端口993上的IMAP连接到它,它工作正常.集成测试也顺利进行
但是,如果集成测试由gitlab CI执行,则会失败.我唯一能得到的例外是Connection拒绝.
可能是服务的端口没有正确暴露?CI服务器如何确定它必须向所述服务打开的端口?
使用CI运行时可能出现什么问题?我该如何以不同方式测试?
对不起,很多问题,我只是绝望地失去了..
小智 9
来自官方文档:
该
services关键字仅定义在您的作业期间运行的另一个 Docker 映像,并链接到该image关键字定义的 Docker 映像。这允许您在构建期间访问服务映像。
image您的文件中没有关键字.gitlab-ci.yml。因此,您的工作在哪里运行实际上是不可预测的integration_test。
如果您的作业在 Docker 容器内运行,则该容器将链接到您的服务的容器。链接是 Docker 的一项传统功能,但它与通过单独网络连接的两个容器非常相似。这与一个组合文件中相互通信的多个服务非常相似。
在作业容器中执行的所有内容都可以通过其名称或别名 ( mail.email) 访问您的服务。查看邮件服务器的 Dockerfile以了解该服务侦听哪些端口:
EXPOSE 25 587 143 465 993 110 995 4190
Run Code Online (Sandbox Code Playgroud)
这里不需要手动公开任何端口。撰写文件中的关键字ports将容器的端口公开给主机系统。如果您在 CI 管道中执行类似的操作,它将向运行作业的系统公开端口。这当然不是你想要的。
简而言之:使用类似的方法mail.email:993从 CI 作业中通过 IMAP 连接到邮件服务器。
我正面临这个问题。EXPOSE <port>如果您拥有 docker 镜像并且能够更新 Dockerfile ,那么它将起作用。就我而言,我将使用多个wiremock 图像在服务部分下的.gitlab-ci.yml 中启动。
services 没有任何直接的端口映射方式,如 docker-compose.yml 中的 8080:8080。
但是,有一种解决方法可以将其作为命令传递,如下所示
services:
- name: wiremock/wiremock:main-alpine
alias: mock-server1
command: [ "--port","9010","--https-port","9040","--verbose"]
- name: wiremock/wiremock:main-alpine
alias: mock-server2
command: [ "--port","9020","--https-port","9050","--verbose"]
- name: wiremock/wiremock:main-alpine
alias: mock-server3
command: [ "--port","9030","--https-port","9060","--verbose"]
Run Code Online (Sandbox Code Playgroud)
请阅读GitLab关于服务的官方文档,下面是命令选项 的片段https://docs.gitlab.com/ee/ci/services/
| 归档时间: |
|
| 查看次数: |
1789 次 |
| 最近记录: |