解决Gitlab自托管出现的Pipeline失败问题

57次阅读
没有评论

问题描述

在自己的AWS EC2实例上搭建了Gitlab服务器,并为该实例分配了弹性IP。在设置了一些代码仓库的Pipeline后,当推送代码并检查Pipeline状态时,出现了错误。错误信息如下:

Running with gitlab-runner 14.3.2 on [PRIVATE IP ADDRESS] JA-qzGJG
Preparing the "docker" executor
Using Docker executor with image node:latest ...
Pulling docker image node:latest ...
Using docker image sha256:c4fbd63932640bbb14c76f80c5b53daf8f01cc1f011d260d07f35bb6874c0c30 for node:latest with digest node@sha256:fec9ab31c9d46ad952abed8119b71e01e995975bd7b580f07b249e803d306dbe ...
Preparing environment
00:02
Running on [RUNNER_NAME] via [PRIVATE IP ADDRESS]...
Getting source from Git repository
02:11
Fetching changes with git depth set to 50...
Reinitialized existing Git repository in /builds/logifiles/queue/.git/
fatal: unable to access 'http://ec2-[OLD_EC2_INSTANCE_IP_ADDRESS].compute-1.amazonaws.com/logifiles/queue.git/': Failed to connect to ec2-[OLD_EC2_INSTANCE_IP_ADDRESS].compute-1.amazonaws.com port 80 after 129988 ms: Operation timed out
ERROR: Job failed: exit code 1

用户已经删除了IP地址,这是出于安全原因。他在Pipeline中的配置如下:

image: node:latest
cache:
  paths:
    - node_modules/
stages:
  - dist
before_script:
  - npm i
dist:
  stage: dist
  script:
    - echo "//${CI_SERVER_HOST}/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authToken=${CI_JOB_TOKEN}">.npmrc
    - npm publish
  rules:
    - if: $CI_COMMIT_BRANCH == "master"

用户想知道如何正确处理这个问题?如何在Pipeline中更改IP地址,或为Gitlab设置不同的URL?或者是否可以通过某种方式将旧EC2实例的域名重定向到新的弹性IP上?是否还有其他解决办法?

解决方案

方案1

以下操作可能需要Root权限,请确保在进行更改之前备份数据并谨慎操作。

更新Gitlab配置

为了解决这个问题,您需要更新Gitlab配置以反映新的EC2实例IP地址或域名。您可以通过以下步骤进行更新:

  1. 登录到您的EC2实例。
  2. 找到并编辑Gitlab配置文件,通常位于 /etc/gitlab/gitlab.rb
  3. 在配置文件中找到类似于以下的配置行,并将旧的EC2实例IP地址或域名更改为新的IP地址或域名。

external_url 'http://new_ec2_instance_domain_or_ip'

  1. 保存更改并关闭文件。
  2. 在终端中运行以下命令以重新配置Gitlab并应用更改:

bash
sudo gitlab-ctl reconfigure

更新Pipeline配置

在您的Gitlab Pipeline配置文件中,确保您正确引用了新的Gitlab域名或IP地址。您的Pipeline配置中的这一行可能需要更新:

- echo "//${CI_SERVER_HOST}/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authToken=${CI_JOB_TOKEN}">.npmrc

确保 ${CI_SERVER_HOST} 部分的值与您新的Gitlab域名或IP地址相匹配。

方案2

修改安全组规则可能会对实例的网络安全性产生影响,请谨慎操作。

更新安全组规则

您的EC2实例的安全组规则似乎允许从任何地方的Internet访问。为了提高安全性,您可以将安全组规则更改为仅允许来自特定IP地址或范围的访问。

  1. 登录到您的AWS管理控制台。
  2. 导航到EC2控制台,然后选择您的EC2实例。
  3. 在实例详细信息页面中,找到并点击“安全组”选项卡。
  4. 选择您的实例的安全组,然后点击“入站规则”选项卡。
  5. 删除不必要的入站规则,然后添加一个允许特定IP地址或范围访问的规则。
  6. 保存更改。

通过这些操作,您应该能够解决Pipeline失败的问题。请根据您的实际情况选择适当的方案,并确保在操作之前备份重要数据以防万一。如果问题仍然存在,请考虑查看Gitlab的文档或寻求更深入的技术支持。

正文完