1. 程式人生 > 實用技巧 >【Jenkins使用之五】jenkins整合Gitlab

【Jenkins使用之五】jenkins整合Gitlab

【Jenkins使用之五】jenkins整合Gitlab
環境
  CentOS Linux release 7.6.1810
  jdk1.8.0_65
  apache-tomcat-8.5.45
  Jenkins-2.235.5
  apache-maven-3.6.3
  git-2.9.5
  gradle-6.6.1
  SonarQube-7.8
  sonar-scanner-cli-4.2.0.1873

一、SSH key
SSH(Secure Shell Protocol):是一種協議,在進行資料傳輸之前,SSH先對聯機資料包通過加密技術進行加密處理,加密後在進行資料傳輸,確保了傳遞的資料安全。
SSH key即SSH金鑰對,可以讓您方便的登入到SSH伺服器,而無需輸入密碼,也就是免密登入。SSH 金鑰對總是成雙出現的,一把公鑰,一把私鑰。公鑰可以自由的放在您所需要連線的SSH伺服器上,而私鑰儲存在客戶端。

1、公鑰和私鑰作用
(1)什麼是公鑰登入
公鑰登入,很多時候也說public key認證,公鑰登入的原理:首先使用者將自己的公鑰儲存在需要登入的遠端機器上面,然後登入的時候,遠端主機會向用戶傳送一段隨機字串,接著使用者使用自己的私鑰加密字串,併發給遠端主機。最後,遠端主機使用儲存的公鑰進行解密,若解密成功,則說明使用者可信,准許登入,不在提示輸入密碼。

備註:
1)服務端會將客戶端發的公鑰寫入到~/.ssh/authorized_keys 檔案末尾。
2)公鑰和私鑰在客戶端(登入端)生成

(2)什麼是口令登入
口令登入,即登入的時候需要輸入登入密碼。

1)客戶端向伺服器發出請求
2)伺服器將自己的公鑰返回給客戶端;

3)客戶端用伺服器的公鑰加密登入資訊, 再將資訊傳送給伺服器;
4)伺服器接收到客戶端傳送的登入資訊, 用自己的私鑰解碼, 如果結果正確, 則同意登入, 建立起連線。

備註:公鑰和私鑰在服務端生成

2、金鑰對的生成

sh-keygen命令,可以生成公鑰和私鑰,預設生成到使用者的家目錄下的.ssh資料夾裡面
示例:ssh-keygen -t rsa -C "[email protected]"
私鑰預設會被儲存在 ~/.ssh/id_rsa
公鑰預設會被儲存在 ~/.ssh/id_rsa.pub
引數解析:
  -f 指定要生成檔案的檔名稱
  -t 設定認定方式,值為rsa,即非對稱加密;或dsa,即數字簽名和認證
  -c 指定公鑰中的備註資訊。在gitlab裡備註一般使用郵箱,因為像gitlab、github等都是通過郵箱來區分的,郵箱僅僅是識別用的key

二、為什麼GitLab需要SSH Key
因為GitLab需要識別出你推送的提交確實是你推送的,而不是別人冒充的,而Git支援SSH協議,所以,GitLab只要知道了你的公鑰,就可以確認只有你自己才能推送。另外,CI/CD(伺服器環境,不能阻塞態等待輸入)
https開頭的就是用的https了,git@ 開頭的就是用的ssh了.

場景一:不同賬號生成不同SSH Key

(1)開啟Git Bash,輸入ssh-keygen -t rsa -C "[email protected]" ,三個回車,沒有輸入密碼,最後在使用者家目錄下找到.ssh目錄

(2)拷貝公鑰裡面的內容,貼上到GitLab-->Settings下面SSH Keys裡

(3)配置完成上面操作後,會發現Gitlab裡專案地址已經變成了:[email protected]:sonartest/maven-basic.git SSH的了.
然後到本地專案目錄下Git Bash執行 git config --global credential.helper store,再次pull或者push的時候還要輸入使用者名稱和密碼,輸入之後 下次就不用再輸入了。注意:如果賬或者郵箱錯誤 可以重新按照以上步驟重新生成。

參考:另外一種免密登入的配置方式

場景二:同一賬號多個終端生成不同SSH Key
GitLab允許你新增多個Key。假定你有若干電腦,你一會兒在公司提交,一會兒在家裡提交,只要把每臺電腦的Key都新增到GitLab,就可以在每臺電腦上往GitLab推送了。那最好這裡-C指定的title最好是主機名來區分。

場景三:一個終端配置多個ssh key
大多數時候,我們的機器上會有很多的git host,比如公司gitlab、github、oschina等,那我們就需要在本地配置多個ssh key,使得不同的host能使用不同的ssh key。以前用github的ssh key,後來工作原因多了一個gitlab的賬號,在繫結gitlab的ssh key時,發現將github的ssh key覆蓋了。怎麼同時繫結github和gitlab的ssh key,並不產生衝突呢?技巧是在.ssh目錄下新建一個config檔案配置一下,就能解決gitlab與github的ssh key的衝突。
做法如下:問題的關鍵是生成金鑰對的時候需要指定檔案
(1)生成公司的GitLab祕鑰ssh key

ssh-keygen -t rsa -C '[email protected]' -f ~/.ssh/gitlab-rsa

(2)生成github祕鑰ssh key

ssh-keygen -t rsa -C '[email protected]' -f ~/.ssh/github-rsa

(3)登入ssh-agent 新增新增私鑰

eval `ssh-agent`
ssh-add ~/.ssh/id_rsa_github
ssh-add ~/.ssh/id_rsa_gitlib
ssh-add ~/.ssh/id_rsa_oschina
ssh-add ~/.ssh/id_rsa_foxmail

(4)在~/.ssh目錄下新建名稱為config的檔案(無後綴名)。用於配置多個不同的host使用不同的ssh key,內容如下:

Host github.com
    HostName github.com
    User [email protected]
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_github
Host gitlib.com
    HostName gitlib.com
    User [email protected]
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_gitlib
Host oschina.com
    HostName oschina.com
    User [email protected]
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_oschina
Host 192.168.1.222
    HostName 192.168.1.222
    User [email protected]
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_foxmail
# 配置檔案引數
# Host : Host可以看作是一個你要識別的模式,對識別的模式,進行配置對應的的主機名和ssh檔案
# HostName : 要登入主機的主機名
# User : 登入名,填郵箱或者使用者名稱都可以
# IdentityFile : 指明上面User對應的identityFile路徑

(5)按照上面的步驟分別往gitlab和github上新增生成的公鑰gitlab_id-rsa.pub和github_id-rsa.pub

參考:git多賬號設定免密登入
git多賬號免密登入2

三、jenkins整合Gitlab

參考:jenkins整合Gitlab