持續集成/持續交付(CI/CD)在服務精細化、更新頻繁的當下顯得愈發重要。 本文將分享如何使用託管的GitLab.com解決方案來實現CI/CD,並將其與Kubernetes原生集成。且文中方法適合其餘一切提供Kubernetes接口的CI/CD工具噢!git
持續集成/持續交付(CI/CD)的主題,在服務變得愈來愈細化、更新愈來愈頻繁的當下,顯得愈發重要。它讓公司可以按照一種一致的、可重複操做的方式徹底自動化地完成代碼的搭建、測試和部署。github
市場中有很多不一樣的CI/CD工具可供用戶使用,它們中的不少將能夠和Kubernetes進行原生集成。服務器
本文將介紹如何使用託管的GitLab.com解決方案來實現CI/CD。不過本文中討論到的Kubernetes集成是通用的,其餘的CI/CD工具只要提供了Kubernetes接口,就一樣能夠按本文的方法、使用服務帳號來與Kubernetes進行對接。app
先決條件工具
用於部署工做負載的Rancher 2.0集羣
登錄gitlab.com
設置GitLab.comgitlab
咱們準備使用GitLab提供的一個模版,首先第一步先經過網址https://gitlab.com/users/sign_in登錄gitlab.com測試
建立項目編碼
將Kubernetes端點添加到你的項目中spa
上面全部的字段都須要填入內容,我會在下文介紹如何填寫。3d
API URL
API URL是GitLab用於和你的集羣中那些用於部署工做負載的Kubernetes API進行通訊的URL。根據Kubernetes集羣運行的位置,你須要確保端口是打開的狀態,這樣才能讓gitlab.com和Kubernetes集羣的<address>:<port>進行通訊。
爲了檢索API URL,咱們將在Rancher服務器上運行一個控制Kubernets集羣的腳本,這一步會生成一個kubeconfig文件,文件中包含了咱們使用GitLab配置Kubernetes設置所須要的信息。
登錄到運行Rancher Server的服務器
在服務器上建立一個文件並把內容複製到裏面
使用命令chmod +x <filename>讓文件可以執行
使用命令./<filename> <name_of_cluster_to_deploy_to>運行腳本
這會在本地目錄中生成一個kubeconfig文件
運行命令cat kubeconfig | grep server:
https的值是須要添加到API URL字段的值
CA證書
CA證書是須要的,由於這些證書一般是自定義證書,它們不在GitLab服務器的證書存儲區中,它們可讓鏈接受到保護。
在API URL指令生成的kubeconfig文件所在文件夾下進行以下操做:
運行cat kubeconfig | grep certificate-authority-data,這會提供給你一個base64編碼的證書字符串,GitLab中的字段須要PEM格式
把編碼的字符串存到一個文件中,好比cert.base64
運行base64 -d cert.base64 > cert.pem
返回一個pem格式的證書,你能夠把它拷貝到GitLab中的CA證書字段裏
Token
爲了讓gitlab.com實例可以與集羣通訊,咱們將爲它建立一個服務帳號。咱們還要給GitLab建立一個命名空間來部署應用程序。
爲了簡化操做,咱們將全部內容都放到了一個文件中,能夠在http://x.co/rm082018找到。
爲了建立必要的條件,咱們須要運行下面的命令:
kubectl apply -f http://x.co/rm082018(.kube/config文件中用的是默認集羣,若是要使用其餘的,能夠選擇添加-kubeconfig <kubeconfig>)
這樣會建立出一個服務帳號而且生成一個token,咱們須要在GitLab Kubernetnes配置pane中使用到該token。
獲取secret execute:kubectl describe secrets/gitlab-secret -n gitlab-managed-apps | grep token:
複製token並將其粘貼到GitLab配置中
項目命名空間
若是你已經按照這篇文章以及我提供的Kubernetes 文件執行到了這一步,那麼下面你須要將Project Namespace設置爲gitlab-managed-apps。若是你已經更新了Kubernetes文件,那麼須要將它改成你設置的命名空間。
Rancher Server 2.0設置
做爲GitLab模板項目的一部分,它們部署了一個PostgresSQL pod。這意味着你須要有一個動態存儲配置程序。若是你沒有這些設置,那麼你須要進入到你須要部署的集羣上的目錄,啓動Library NFS配置程序。咱們目前暫不建議將這用於生產環境,不過它能讓auto devops功能正常工做。
開啓Auto Devops
在GitLab界面,進入Setting-CI/CD而且擴展Auto DevOps。
點擊【開啓Auto DevOps/Enable Auto Devops】的按鈕。
在Domain部分中,它要求你指定將用於訪問要部署服務的DNS名稱。DNS名稱應該指向集羣上部署服務的入口。在測試中,你可使用<host-ip>.nip.io,它將解析爲指定的主機ip。
點擊【保存更改/Save changes】,這會自動發佈你的流水線而且啓動做業運行。
你能夠進入CI/CD – Pipelines中查看進度,在production階段結束時,你應該能看到能夠訪問應用程序的http地址了
但願這篇博客能夠帶你成功部署一個很棒的CI/CD流水線。另外,正如文章開頭所言,文中的Kubernetes部分適用於大多數CI/CD Kubernetes集成。