GitLab CI/CD 的文檔 一次看個夠 Dokcer鏡像gitlab 文檔
1112
2025-04-01
亞搏體育app文件
亞搏體育app CI / CD
在Gitlab CI / CD上使用SSH密鑰
在Gitlab CI / CD上使用SSH密鑰
上次更新時間:2017-12-13?
Using SSH keys with GitLab CI/CD
GitLab當(dāng)前不支持在構(gòu)建環(huán)境(運行GitLab Runner的環(huán)境)中管理SSH密鑰的內(nèi)置支持。
SSH密鑰在以下情況下很有用:
您想簽出內(nèi)部子模塊
您想使用包管理器(例如Bundler)下載私有包
您想要將應(yīng)用程序部署到自己的服務(wù)器上,例如Heroku
您要執(zhí)行從構(gòu)建環(huán)境到遠(yuǎn)程服務(wù)器的SSH命令
您想將文件從構(gòu)建環(huán)境同步到遠(yuǎn)程服務(wù)器
如果上述任何事情都響了,那么您很可能需要SSH密鑰。
支持最廣泛的方法是通過擴(kuò)展.gitlab-ci.yml,將SSH密鑰注入到構(gòu)建環(huán)境中,并且該解決方案可與任何類型的執(zhí)行程序 (Docker,shell等)一起使用。
這個怎么運作
使用以下命令在本地創(chuàng)建新的SSH密鑰對 ssh-keygen
將私鑰作為變量添加到您的項目中
運行ssh-agent期間作業(yè)以加載私鑰。
將公共密鑰復(fù)制到您想要訪問的服務(wù)器上(通常在中 ~/.ssh/authorized_keys),或者 在訪問私有GitLab存儲庫時將其添加為部署密鑰。
注意: 除非您啟用 調(diào)試日志 記錄,否則私鑰將不會顯示在作業(yè)日志中 。您可能還需要檢查 管道 的可見性。
使用Docker執(zhí)行器時的SSH密鑰
當(dāng)您的CI / CD作業(yè)在Docker容器中運行(意味著包含環(huán)境)并且您想要在私有服務(wù)器中部署代碼時,您需要一種訪問它的方法。這是SSH密鑰對派上用場的地方。
您首先需要創(chuàng)建一個SSH密鑰對。有關(guān)更多信息,請按照說明生成SSH密鑰。 請勿在SSH密鑰中添加密碼,否則before_script會提示您輸入密碼。
創(chuàng)建一個新變量。在“ 密鑰”中輸入名稱,SSH_PRIVATE_KEY然后在“ 值”字段中粘貼先前創(chuàng)建的私鑰的內(nèi)容。
修改您.gitlab-ci.yml的before_script操作。在以下示例中,假定使用基于Debian的圖像。根據(jù)需要進(jìn)行編輯:
before_script: ## ## Install ssh-agent if not already installed, it is required by Docker. ## (change apt-get to yum if you use an RPM-based image) ## - 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )' ## ## Run ssh-agent (inside the build environment) ## - eval $(ssh-agent -s) ## ## Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store ## We're using tr to fix line endings which makes ed25519 keys work ## without extra base64 encoding. ## https://gitlab.com/gitlab-examples/ssh-private-key/issues/1#note_48526556 ## - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - ## ## Create the SSH directory and give it the right permissions ## - mkdir -p ~/.ssh - chmod 700 ~/.ssh ## ## Optionally, if you will be using any Git commands, set the user name and ## and email. ## #- git config --global user.email "user@example.com" #- git config --global user.name "User name"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
注: 在 before_script 可以全局或每一個作業(yè)設(shè)置。
確保專用服務(wù)器的SSH主機(jī)密鑰已驗證。
作為最后一步,加上公眾從你的第一步,你想擁有從構(gòu)建環(huán)境中的接入服務(wù)創(chuàng)建的一個關(guān)鍵。如果要訪問私有的GitLab存儲庫,則需要將其添加為部署密鑰。
而已!現(xiàn)在,您可以在構(gòu)建環(huán)境中訪問私有服務(wù)器或存儲庫。
使用Shell執(zhí)行程序時的SSH密鑰
如果您使用的是Shell執(zhí)行程序而不是Docker,則設(shè)置SSH密鑰會更加容易。
您可以從安裝了GitLab Runner的計算機(jī)生成SSH密鑰,并將該密鑰用于在該計算機(jī)上運行的所有項目。
首先,登錄到運行您的作業(yè)的服務(wù)器。
然后,從終端以gitlab-runner用戶身份登錄:
sudo su - gitlab-runner
1
按照說明生成SSH密鑰對,以 生成SSH密鑰。 請勿在SSH密鑰中添加密碼,否則before_script會提示您輸入密碼。
作為最后一步,加上公眾從前面創(chuàng)建要具有從構(gòu)建環(huán)境中的接入服務(wù)的一個關(guān)鍵。如果要訪問私有的GitLab存儲庫,則需要將其添加為 部署密鑰。
完成后,嘗試登錄到遠(yuǎn)程服務(wù)器以接受指紋:
ssh example.com
1
要訪問GitLab.com上的存儲庫,可以使用git@gitlab.com。
驗證SSH主機(jī)密鑰
最好檢查私有服務(wù)器自己的公用密鑰,以確保您不會受到中間人攻擊的攻擊。萬一發(fā)生任何可疑事件,您將注意到它,因為作業(yè)將失敗(如果公鑰不匹配,則SSH連接將失敗)。
要查找服務(wù)器的主機(jī)密鑰,請ssh-keyscan從受信任的網(wǎng)絡(luò)(最好從專用服務(wù)器本身)運行命令:
## Use the domain name ssh-keyscan example.com ## Or use an IP ssh-keyscan 1.2.3.4
1
2
3
4
5
創(chuàng)建一個新變量,將其 SSH_KNOWN_HOSTS作為“鍵”,并作為“值”添加的輸出ssh-keyscan。
注意: 如果需要連接到多個服務(wù)器,則所有服務(wù)器主機(jī)密鑰都需要收集在變量的 Value 中,每行一個密鑰。
提示: 通過使用變量而不是 ssh-keyscan 直接在變量內(nèi)部 .gitlab-ci.yml ,它具有以下優(yōu)點: .gitlab-ci.yml 如果主機(jī)域名由于某些原因而更改,則不必更改。而且,這些值是由您預(yù)定義的,這意味著如果主機(jī)密鑰突然更改,CI / CD作業(yè)將失敗,并且您將知道服務(wù)器或網(wǎng)絡(luò)出了點問題。
現(xiàn)在SSH_KNOWN_HOSTS已經(jīng)創(chuàng)建了變量,除了 上面的 內(nèi)容.gitlab-ci.yml之外,還需要添加以下內(nèi)容:
before_script: ## ## Assuming you created the SSH_KNOWN_HOSTS variable, uncomment the ## following two lines. ## - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts ## ## Alternatively, use ssh-keyscan to scan the keys of your private server. ## Replace example.com with your private server's domain name. Repeat that ## command if you have more than one server to connect to. ## #- ssh-keyscan example.com >> ~/.ssh/known_hosts #- chmod 644 ~/.ssh/known_hosts ## ## You can optionally disable host key checking. Be aware that by adding that ## you are susceptible to man-in-the-middle attacks. ## WARNING: Use this only with the Docker executor, if you use it with shell ## you will overwrite your user's SSH config. ## #- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" >> ~/.ssh/config'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
示例項目
為了方便起見,我們建立了一個示例SSH項目,使用我們的公共 共享運行程序在GitLab.com上運行。
想要破解嗎?只需對其進(jìn)行分叉,提交并推送您的更改。稍后,公共跑步者將選擇更改并開始工作。
Git GitHub ssh
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。