gitlab - 用于作曲家包的 ci

时间:2021-02-19 11:31:32

标签: docker gitlab gitlab-ci gitlab-ci-runner

我在我的家庭办公室设置了一个开发服务器并通过 docker-compose 安装了 gitlab。到目前为止一切正常,我可以登录、推送提交等。

现在我想设置一个 CI 管道来在推送新标签时构建 Composer 包。所以我点击了 CI/CD 按钮并添加了 Composer 模板中的 .gitlab-ci.yml 文件。但管道只是悬而未决。所以我想我可能需要先注册一个跑步者。

我在通过 docker 运行 gitlab 的同一台机器上安装了 gitlab-runner(通过 apt),并使用 gitlab 提供的域和密钥注册了运行器(在添加运行器页面中)。我选择了 docker 作为执行器,给它取了个名字,其他的都保留了默认值。

运行程序已在 gitlab 中正确注册,并且 ci 管道现在可以工作,但总是失败。

我唯一的输出是:

Running with gitlab-runner 11.2.0 (11.2.0)
  on **************
Using Docker executor with image curlimages/curl:latest ...
Pulling docker image gitlab-runner-helper:11.2.0 ...

gitlab-ci 文件内容为:

# This file is a template, and might need editing before it works on your project.
# Publishes a tag/branch to Composer Packages of the current project
publish:
  image: curlimages/curl:latest
  stage: build
  variables:
    URL: "$CI_SERVER_PROTOCOL://$CI_SERVER_HOST:$CI_SERVER_PORT/api/v4/projects/$CI_PROJECT_ID/packages/composer?job_token=$CI_JOB_TOKEN"
  script:
    - version=$([[ -z "$CI_COMMIT_TAG" ]] && echo "branch=$CI_COMMIT_REF_NAME" || echo "tag=$CI_COMMIT_TAG")
    - insecure=$([ "$CI_SERVER_PROTOCOL" = "http" ] && echo "--insecure" || echo "")
    - response=$(curl -s -w "\n%{http_code}" $insecure --data $version $URL)
    - code=$(echo "$response" | tail -n 1)
    - body=$(echo "$response" | head -n 1)
    # Output state information
    - if [ $code -eq 201 ]; then
        echo "Package created - Code $code - $body";
      else
        echo "Could not create package - Code $code - $body";
        exit 1;
      fi

因为我没有对模板文件进行任何更改,所以我怀疑 gitlab-runner 设置需要一些配置才能工作,可能是组分配或类似的东西。

当运行 systemctl status gitlab-runner 我可以看到:

<块引用>

无法为 /builds/{group} 创建容器卷来自守护进程的错误响应:gitlab-runner-helper 的拉取访问被拒绝,存储库不存在或可能需要“docker 登录”:被拒绝:请求的资源访问是被拒绝 (executor_docker.go:166:3s)" job=15 project=34 runner=******

所以我转到了 gitlab 中的跑步者部分,并为特定项目启用了跑步者。所以我可以避免上面的错误,但管道仍然中断。

gitlab 中的输出仍然相同,但 gitlab-runner 日志不同:

<块引用>

错误后不继续拉取:错误:\ndenied:请求访问资源被拒绝\n未授权:需要身份验证\n

可悲的是 - 我没有从这里得到任何进一步的

每次我按下管道的重试按钮时,我都会收到以下系统日志条目:

<块引用>

正在检查作业...收到" job=19 repo_url="correct-url-for-repo" runner=****** 此消息出现两次

<块引用>

错误后不继续拉:错误:\n拒绝:请求访问资源被拒绝\n未授权:需要身份验证\n 忽略从注册表返回的额外错误:未授权:需要身份验证

<块引用>

无法为 /builds/{group} 创建容器卷来自守护进程的错误响应:gitlab-runner-helper 的拉取访问被拒绝,存储库不存在或可能需要“docker 登录”:被拒绝:请求的资源访问是被拒绝 (executor_docker.go:166:3s)" job=19 project=34 runner=****** 作业失败:来自守护进程的错误响应:gitlab-runner-helper 的拉取访问被拒绝,存储库不存在或可能需要“docker 登录”:拒绝:请求访问资源被拒绝 (executor_docker.go:166:3s)”作业=19 项目=34 跑步者=****** 两条消息出现两次

因此要么不允许 gitlab-runner 拉取 docker 图像,要么不允许访问我的 gitlab 项目,但我无法找出问题所在。

以 root 身份运行 gitlab-runner restart 时,我看到以下“错误”

<块引用>

ERRO[0000] Docker 执行器:预构建的图像助手将从 /var/lib/gitlab-runner 加载。

有人可以帮我吗:)?

2 个答案:

答案 0 :(得分:0)

选择正确的 Docker image for the runner。取决于你在哪里执行它,也可能取决于你的 GitLab 版本。另外,在执行管道之前手动尝试一下:

docker pull gitlab/gitlab-runner-helper:x86_64-latest

要使用选定的图像,请修改 runner's config file

[[runners]]
  (...)
  executor = "docker"
  [runners.docker]
    (...)
    helper_image = "gitlab/gitlab-runner-helper:tag"

答案 1 :(得分:0)

图像 gitlab-runner-helper, gitlab/gitlab-runner-helper:11.2.0 不存在。似乎可在 ubuntu 中安装的 debian 包以某种方式损坏了......所以我想我可能需要安装最新的 gitlab-runner 版本

这是我所做的:(我使用的是 Ubuntu 20.04)

curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash
cat <<EOF | sudo tee /etc/apt/preferences.d/pin-gitlab-runner.pref
Explanation: Prefer GitLab provided packages over the Debian native ones
Package: gitlab-runner
Pin: origin packages.gitlab.com
Pin-Priority: 1001
EOF

Source

所以我能够将 gitlab-runner 更新到最新版本。

但是还是没有成功,现在服务没有任何错误信息就启动不了,systemctl只告诉mit进程退出了。

系统日志告诉我:

<块引用>

chdir /var/lib/gitlab-runner: 没有那个文件或目录

打开 /etc/init.d/gitlab-runner 向我展示了该路径作为服务的 --working-directory 参数。

所以我创建了该目录并将其所有权更改为 gitlab-runner

这次我可以运行 ci 管道了!

仍然有错误

<块引用>

致命:无法访问“http://{mylocaldomain}/isat/typo3-gdpr.git/”:无法解析主机:{mylocaldomain}

好的 - 无法解析 dns,因为我使用的是本地域。

here 所述,您可以将 extra_host 传递给 docker 执行程序。

为此,只需调整 /etc/gitlab-runner/config.toml 文件并添加 extra_hosts 选项:

concurrent = 1
check_interval = 0

[[runners]]
  name = "lab"
  url = "http://{localDomain}/"
  token = "******"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "ruby:2.1"
    privileged = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0
    extra_hosts = ["{localDomain}:{ip}"]
  [runners.cache]

现在我可以成功运行 ci 管道并且我的包在 composer 注册表中列出!