極狐GitLab CI/CD 作業不執行,如何處理?

极狐GitLab發表於2024-09-12

本分分享 GitLab CI/CD Job 不工作的的故障排查方法:當 GitLab Runner 不接受 Job,Job 一直處於等待狀態,如何解決此問題。

極狐GitLab 為 GitLab在中國的發行版,中文版本對於中國開發者更友好,和 GitLab 一樣,極狐GitLab 也可以私有化部署。詳情可以檢視官網指南

故障背景

使用 Helm 安裝了一個極狐GitLab Runner,從 Runner 的管理介面看 Runner 處於工作狀態

file

在 Kubernetes 後臺檢視,Runner 的執行也正常

kubectl  -n jh-gitlab-runner get pods
NAME                                              READY   STATUS    RESTARTS   AGE
jh-gitlab-runner-gitlab-runner-5c558fb88b-lnfxm   1/1     Running   0          157m

在專案中新增 .gitlab-ci.yml檔案後,自動觸發了 CI/CD 流水線,但是 Job 卻一直處在等待狀態

file

故障排查

起初沒有在意這個狀態,因為自部署的 runner,有時候剛開始是會出現等待中的狀態,但是等了一會兒發現不對勁,一直在等待,檢視 kubernetes 後臺,也沒見執行 Job 的動態 pod 生成。於是檢視 Runner 的 pod 日誌,也沒發現異常:

kubectl  -n jh-gitlab-runner logs -f jh-gitlab-runner-gitlab-runner-5c558fb88b-lnfxm
Added job to processing list                        builds=1 job=7 max_builds=10 project=2 repo_url=http://jhma.jihulab.net/root/kubernetes-agent.git time_in_queue_seconds=15
Appending trace to coordinator...ok                 code=202 job=7 job-log=0-805 job-status=running runner=xRnstJB7U sent-log=0-804 status=202 Accepted update-interval=1m0s
Job succeeded                                       duration_s=9.472339120000001 job=7 project=2 runner=xRnstJB7U
Appending trace to coordinator...ok                 code=202 job=7 job-log=0-2737 job-status=running runner=xRnstJB7U sent-log=805-2736 status=202 Accepted update-interval=1m0s
Updating job...                                     bytesize=2737 checksum=crc32:2043b475 job=7 runner=xRnstJB7U
Submitting job to coordinator...ok                  bytesize=2737 checksum=crc32:2043b475 code=200 job=7 job-status=success runner=xRnstJB7U update-interval=0s
Removed job from processing list                    builds=0 job=7 max_builds=10 project=2 repo_url=http://jhma.jihulab.net/root/kubernetes-agent.git time_in_queue_seconds=15

然後懷疑是 Runner 突然“卡殼”,用 SRE 的行為準則對 Runner 進行了重啟,重啟之後還是一樣的效果。這時候突然,腦子裡靈光一現 Runner 是否接受 Job,是有一個標籤選項的。標籤選項是 Runner 的一個重要功能,主要是方便使用者自行分配 Runner 的使用,這樣就能讓 Runner 的使用效率變得更高。

於是點選檢視了 Runner 的配置,一看配置還真是:

有一個選項執行未打標籤的作業,這個選項並未勾選。根據字面意思就能理解這個選項的重要性了:如果這個選項未勾選,那麼 Runner 就不會執行沒有打標籤的 Job,說直白點就是,如果你的 .gitlab-ci.yml檔案中用到了 tag 這個關鍵字,那麼就意味著你的 CI/CD 使用了標籤。這個標籤要和 Runner 嚴格匹配,Runner 才會執行此作業。

我檢視了一下 .gitlab-ci.yml檔案中的描述,並沒有使用 tag,也就是說沒有使用標籤。這個時候就確定了,該問題就是由於此選項沒有勾線所致,因此立馬勾選了此選項,然後進行了配置儲存。

然後就看到 Job 開始執行了,並且執行成功

在 Kubernetes 後臺也看到了動態生成了 pod,然後執行完 Job 之後,pod 自動被刪除

 kubectl  -n jh-gitlab-runner get pods
NAME                                               READY   STATUS     RESTARTS   AGE
jh-gitlab-runner-gitlab-runner-5c558fb88b-lnfxm    1/1     Running    0          20m
runner-xrnstjb7u-project-2-concurrent-0-y0idxyf2   0/2     Init:0/1   0          1s
root@xiaomage:/home/xiaomage/runner# kubectl  -n jh-gitlab-runner get pods
NAME                                               READY   STATUS            RESTARTS   AGE
jh-gitlab-runner-gitlab-runner-5c558fb88b-lnfxm    1/1     Running           0          20m
runner-xrnstjb7u-project-2-concurrent-0-y0idxyf2   0/2     PodInitializing   0          2s
root@xiaomage:/home/xiaomage/runner# kubectl  -n jh-gitlab-runner get pods
NAME                                               READY   STATUS            RESTARTS   AGE
jh-gitlab-runner-gitlab-runner-5c558fb88b-lnfxm    1/1     Running           0          20m
runner-xrnstjb7u-project-2-concurrent-0-y0idxyf2   0/2     PodInitializing   0          3s
root@xiaomage:/home/xiaomage/runner# kubectl  -n jh-gitlab-runner get pods -w
NAME                                               READY   STATUS            RESTARTS   AGE
jh-gitlab-runner-gitlab-runner-5c558fb88b-lnfxm    1/1     Running           0          20m
runner-xrnstjb7u-project-2-concurrent-0-y0idxyf2   0/2     PodInitializing   0          4s
runner-xrnstjb7u-project-2-concurrent-0-y0idxyf2   2/2     Running           0          4s


runner-xrnstjb7u-project-2-concurrent-0-y0idxyf2   2/2     Terminating       0          9s
^Croot@xiaomage:/home/xiaomage/runner# kubectl  -n jh-gitlab-runner get pods
NAME                                               READY   STATUS        RESTARTS   AGE
jh-gitlab-runner-gitlab-runner-5c558fb88b-lnfxm    1/1     Running       0          21m
runner-xrnstjb7u-project-2-concurrent-0-y0idxyf2   2/2     Terminating   0          25s

故障總結

Runner 對於極狐GitLab CI/CD 來講是非常重要的,很多時候自建的 Runner 能夠有更大的靈活性來執行流水線,但是往往一個小小的配置就能夠阻塞整個工作,排查的過程還是要有章法,首先應該從配置入手,檢視有些配置是否正確,其次要多看日誌,從日誌中發現問題,最後也是最重要的多看官網文件、多練習,只有對 GitLab 懂的越多,故障排查也才越快。

相關文章