我在一個自托管的 GitLab 實體和 10 個 GitLab Runners 上運行 CI 作業。
對于這個最小的示例,需要兩個 Runner:
- Admin-01
安裝了 Docker 的 shell 運行器。它可以執行例如docker build ...創建新影像,然后將其推送到私有 Docker 注冊表(也是自托管/GitLab 安裝的一部分) - Docker-01
一個 docker runner,它執行之前構建的鏡像。
在普通的裸機、虛擬機或 shell 運行程式上,我會修改例如~/.profile在執行命令before_script或script執行部分之前執行命令。在我的用例中,我需要設定新的環境變數并獲取一些我想在影像中運行的工具提供的組態檔。是的,可以不同地設定環境變數,但似乎無法在執行before_script或script執行部分之前自動獲取 Bash 腳本。
手動獲取 Bash 源檔案時,它可以作業。我還注意到,我必須在script塊中再次獲取它。before_script所以我假設 Bash 會話在塊到塊之間結束script。.gitlab-ci.yml當然,由影像用戶手動在每個檔案中手動獲取工具 Bash 配置腳本并不是一個好的解決方案。
myjobn:
# ...
before_script:
- source /root/profile.additions
- echo "PATH=${PATH}"
# ...
script:
- source /root/profile.additions
- echo "PATH=${PATH}"
# ...
上述對例如 shell 運行器的修改在 GitLab Runner 執行的影像中不起作用。感覺容器中的 Bash 沒有作為登錄 shell 啟動。
最小的示例影像構建如下:
- 從 Docker Hub 獲取 debian:bullseye-slim
- 使用
RUNDockerfile 中的命令來修改一些回顯輸出/etc/profile/root/.bashrc/root/.profile
# ...
RUN echo "echo GREETINGS FROM /ROOT/PROFILE" >> /root/.profile \
&& echo "echo GREETINGS FROM /ETC/PROFILE" >> /etc/profile \
&& echo "echo GREETINGS FROM /ROOT/BASH_RC" >> /root/.bashrc
作業開始時,沒有任何回聲正在列印訊息,而貓顯示,回聲命令已在構建影像時放置在正確的位置。
接下來我嘗試修改
SHELL ["/bin/bash", "-l", "-c"]
但我認為,這僅對RUNDockerfile 中的命令有影響,但對已執行的容器沒有影響。CMD ["/bin/bash", "-l"]
我沒有看到任何行為變化。
問題:
- 如何在 GitLab Runner 管理的 Docker 映像中啟動 Bash 作為登錄 shell,以便準備好配置腳本?
- 如何在容器之前
before_script或script運行之前修改環境。修改意味著環境變數和執行/采購配置腳本或修補的默認腳本,如~/.profile. - GitLab Runner 如何使用 Docker 執行作業?
GitLab 在官方檔案中沒有記錄這一點......
到目前為止我所知道的,它在 GitLab 指定的 Docker 映像和用戶定義的映像之間跳轉,并共享一些目錄/卷左右。
注意:
是的,可以使用 中的一些 Docker 引數來實作該行為docker run,但正如我所寫的,GitLab Runner 正在管理容器。或者,如何配置,GitLab Runner 如何啟動影像?據我所知,對于這種情況,沒有可用/記錄的配置選項。
uj5u.com熱心網友回復:
安裝了 Docker 的 shell 運行器。它可以執行例如 docker build ...
使用 docker-in-docker 或使用 kaniko。https://docs.gitlab.com/ee/ci/docker/using_docker_build.html
Shell 執行器就像“最后的手段”,您想專門對服務器進行更改,或者您正在將應用程式“部署到”此服務器。
如何在 GitLab Runner 管理的 Docker 映像中啟動 Bash 作為登錄 shell,以便準備好配置腳本?
添加ENTRYPOING bash -l到您的影像。或者從 gitlab-ci.yml 設定入口點。請參閱ENTRYPOINTdocker 檔案和 gitlab-ci.yml 檔案image: entrypoint:。
如何在 before_script 或腳本運行之前修改容器中的環境。
使用修改后的環境構建映像。查閱 Dockerfile 檔案中的ENV宣告。
或者從 gitlab-ci.yml 檔案中設定環境。閱讀variables:gitlab-ci 中的檔案。
如何在 GitLab Runner 執行的鏡像中準備 shell 環境?
別。這個想法是環境是可重現的,因此,事先不應該有任何變化。添加variables:gitlab-ci 檔案并盡可能使用基礎鏡像。
GitLab Runner 如何使用 Docker 執行作業?
GitLab 在官方檔案中沒有記錄這一點......
Gitlab 是開源的。
到目前為止我所知道的,它在 GitLab 指定的 Docker 影像和用戶定義的影像之間跳轉,并共享一些目錄/卷左右。
是的,首先執行gitlab-runner-helper - 它有 git 和 git-lfs 并且基本上克隆存盤庫并下載和上傳工件。然后運行指定的容器image:,將克隆的存盤庫復制到其中,并在其中執行專門準備的 shell 腳本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/412228.html
標籤:
