簡體   English   中英

gitlab - 作曲家 package 的 ci

[英]gitlab - ci for composer package

我在我的家庭辦公室中設置了一個開發服務器,並通過 docker-compose 安裝了 gitlab。 到目前為止一切正常,我可以登錄,推送提交等等。

現在我想設置一個 CI 管道來在推送新標簽時構建作曲家包。 所以我點擊了 CI/CD 按鈕並從作曲家模板中添加了 .gitlab-ci.yml 文件。 但管道只是懸而未決。 所以我想我可能需要先注冊一個跑步者。

我在通過 docker 運行 gitlab 的同一台機器上安裝了 gitlab-runner (通過 apt),並使用 ZD0498FAC9D755142B3DFD9F05281701ZF 給出的域和密鑰注冊了跑步者。 我選擇了 docker 作為執行者,給它起了一個名字,並將其他所有內容都保留為默認值。

跑步者在 gitlab 中正確注冊並且 ci 管道現在正在工作,但它總是失敗。

我唯一的 output 是:

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 login”:拒絕:請求的資源訪問被拒絕(executor_docker .go:166:3s)" 工作=15 項目=34 跑步者=******

所以我去了 gitlab 中的跑步者部分,並為特定項目啟用了跑步者。 所以我可以避免上面的錯誤,但管道仍然中斷。

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

錯誤后不繼續拉取:錯誤:\n拒絕:請求的資源訪問被拒絕\n未經授權:需要身份驗證\n

可悲的是 - 我沒有從這里得到任何進一步

每次我按下管道的重試按鈕時,我都會得到以下系統日志條目:

正在檢查作業...收到" job=19 repo_url="correct-url-for-repo" runner=****** 此消息出現兩次

錯誤后不繼續拉取:錯誤:\n拒絕:請求的資源訪問被拒絕\n未經授權:需要身份驗證\n忽略從注冊表返回的額外錯誤:未經授權:需要身份驗證

無法為 /builds/{group} 創建容器卷 來自守護進程的錯誤響應:gitlab-runner-helper 的拉取訪問被拒絕,存儲庫不存在或可能需要“docker login”:拒絕:請求的資源訪問被拒絕(executor_docker .go:166:3s)" job=19 project=34 runner=****** 作業失敗:來自守護進程的錯誤響應:gitlab-runner-helper 的拉取訪問被拒絕,存儲庫不存在或可能需要 'docker login ': denied: 請求訪問資源被拒絕 (executor_docker.go:166:3s)" job=19 project=34 runner=****** 兩條消息出現兩次

因此,要么不允許 gitlab-runner 提取 docker 圖像,要么不允許訪問我的 gitlab 項目,但我無法找出問題所在。

以 root 身份運行gitlab-runner restart ,我看到以下“錯誤”

錯誤 [0000] Docker 執行器:預構建的圖像助手將從 /var/lib/gitlab-runner 加載。

有人可以幫幫我嗎:)?

Select 跑步者的正確Docker 圖像 取決於你在哪里執行它,也可能取決於你的 GitLab 版本。 另外,在執行管道之前手動嘗試:

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

要使用選定的圖像,請修改運行器的配置文件

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

圖像 gitlab-runner-helper, gitlab/gitlab-runner-helper:11.2.0 不存在。 似乎 debian package 可安裝在 ubuntu 中以某種方式損壞......所以我想我可能需要安裝最新的 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

資源

所以我能夠將 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 分辨率不可能,因為我使用本地域。

如此處所述您可以將 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 管道,並且我的 package 已列在作曲家注冊表中!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM