在GitLab CI中使用共享Runner进行构建并在服务器上使用Shell Executor进行部署的问题

74次阅读
没有评论

问题描述

在GitLab CI中遇到了一个问题,他想在共享Runner上构建镜像,并将其推送到GitLab仓库中。然后,他希望在自己的服务器上使用Shell Executor拉取该镜像,并执行部署操作。然而,在使用Shell Executor时,当他尝试运行Docker命令时,出现了错误:

$ docker infoerror during connect: Get http://docker:2375/v1.37/info: dial tcp: lookup docker on 172.31.0.2:53: no such host

他提供了他的gitlab-ci.yml文件,其中定义了构建和部署阶段的步骤。用户已经尝试过在没有构建阶段的情况下运行,并且在DOCKER_HOST变量和docker:dind服务的情况下运行时正常工作。

解决方案

请注意以下操作可能涉及到GitLab CI和Docker的配置。确保在操作之前备份关键文件。

在这个情况下,问题出现在Shell Executor尝试与Docker主机通信时的主机名解析上。解决此问题的一种方法是配置Shell Executor以正确连接到Docker引擎。以下是解决方案的步骤:

步骤1:修改GitLab Runner配置

  1. 登录到您的GitLab服务器或相应的服务器。
  2. 找到用于Shell Executor的GitLab Runner配置文件,通常位于/etc/gitlab-runner/config.toml
  3. 打开配置文件,并查找与您的Shell Executor相关的部分。
  4. 添加或修改extra_hosts选项,将Docker主机的IP地址和主机名添加为映射。这将解决Shell Executor在与Docker引擎通信时的主机名解析问题。示例如下:
    toml
    [[runners]]
    name = "My Shell Executor Runner"
    url = "https://gitlab.com/"
    token = "YOUR_RUNNER_TOKEN"
    executor = "shell"
    [runners.custom_build_dir]
    [runners.docker]
    image = "docker:stable"
    privileged = false
    disable_cache = false
    extra_hosts = ["docker:<Docker_Host_IP>"]

    请将<Docker_Host_IP>替换为您实际的Docker主机IP地址。

步骤2:修改gitlab-ci.yml文件

在您的gitlab-ci.yml文件中,您需要确保在部署阶段的script中使用正确的Docker引擎地址,而不是tcp://docker:2375。以下是如何修改deploy阶段的示例:

deploy:
  stage: deploy
  script:
    - docker -H tcp://<Docker_Host_IP>:2375 pull $CONTAINER_IMAGE:latest || true
  tags:
    - deploy
    - shell

请将<Docker_Host_IP>替换为您实际的Docker主机IP地址。

步骤3:保存更改并重新启动GitLab Runner

完成上述更改后,保存配置文件并重新启动GitLab Runner,使配置生效。

通过以上步骤,您应该能够解决Shell Executor与Docker主机通信的问题,并成功在GitLab CI中使用共享Runner进行构建并在服务器上使用Shell Executor进行部署。

请注意,根据您的环境和配置,可能需要进一步调整和测试。确保在操作之前备份关键文件以及在生产环境中进行适当的测试。

【参考链接】:
GitLab Runner配置文档
Docker引擎连接选项

正文完