一 CICD的意思
1 持續集成(CI)
持續集成指在和向遠程倉庫 push 代碼后,在這次提交合並入主分支前進行一系列測試,構建等流程。假設現在有個應用的代碼存儲在 gitlab 上,每天開發者都 push 很多次提交,針對每次 push,你可以創建一系列腳本進行自動測試,降低往應用里引入錯誤的概率。這就是持續集成,它可應用在包括開發分支在內的多個分支上。
2 持續交付(CD)
持續交付的英文全稱是:Continuous delivery,縮寫也是CD,它是一種軟件工程手法。
它可以讓軟件產品的產出過程在一個短周期內完成,以保證軟件可以穩定、持續的保持在隨時可以釋出的狀況。它的目標在於讓軟件的建置、測試與釋出變得更快以及更頻繁。這種方式可以減少軟件開發的成本與時間,減少風險。
3 持續部署(CD)
持續部署在持續集成的基礎上更進一步,指將推送指倉庫默認分支的部署至產品環境。如果這部分需要手動觸發,這就是一個持續交付(Continuous Delivery)環節。
二 常用的CICD軟件對比

所以這次主要介紹rancher的使用,它的官網文檔為https://rancher2.docs.rancher.cn/,詳情請查看官方文檔
三 rancher的安裝和使用
1 安裝(這里我用的是單節點容器安裝)
docker run -d --restart=unless-stopped \
-p 80:80 -p 443:443 \
rancher/rancher:latest
單節點安裝很方便。然后等待一會,可以去瀏覽器訪問即可。如下圖:需要自己設置一下密碼

2 導入k8s集群
點擊web頁面導入集群,然后出現兩行命令(都是自動生成的,只需要去master節點執行一下即可)
在主節點上面執行,綁定一個用戶 --user 后面的用戶,去你.kube/cofig里面查看
kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user kubernetes-admin
然后再在主節點運行下面命令
curl --insecure -sfL https://192.168.0.211/v3/import/7kgj6rwfg88c7pttkzp7w7ztdsf77wcfwgtr84sh6dw482zr58lm5s.yaml | kubectl apply -f -
然后等待一會,集群就導入成功了
3 設置流水線
3.1 前提
設置流水線之前,需要安裝gitlab代碼倉庫和harbor鏡像倉庫,這里我的gitlab是用容器安裝的,harbor倉庫是用的官方的倉庫,自己注冊一個就行
安裝gitlab,可以先下載鏡像,在運行,然后更改一下gitlab配置文件里面的host
docker run -d -p 443:443 -p 80:80 -p 222:22 --name gitlab --restart always -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce
3.2 rancher設置
認證harbor鏡像倉庫:

然后添加harbor倉庫

gitlab生成需要的ID和Key


認證gitlab代碼倉庫:


然后就可以自動同步代碼,設置流水線了

第一步克隆是默認的(是認證倉庫的時候自動生成的),不能更改,我這里是一個java項目,然后打包

然后構建鏡像,需要提交認證鏡像倉庫地址

最后發布

deploy.yml文件內容如下:(這個文件也要放到gitlab倉庫里面)
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: web
spec:
replicas: 1
selector:
matchLabels:
app: java-demo
template:
metadata:
labels:
app: java-demo
spec:
containers:
- name: tomcat
image: huningfei/rancher:docker_tag
ports:
- containerPort: 8080
name: web
livenessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 60
timeoutSeconds: 5
failureThreshold: 12
readinessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 60
timeoutSeconds: 5
failureThreshold: 12
---
apiVersion: v1
kind: Service
metadata:
name: web
spec:
type: NodePort
selector:
app: java-demo
ports:
- protocol: TCP
port: 80
targetPort: 8080
nodePort: 30002
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: web
spec:
rules:
- host: www.hu.com
http:
paths:
- path: /
backend:
serviceName: web
servicePort: 80
最后發布完成之后,可以去資源---工作負載里面查看
也可以通過命令查看
查看pod

查看svc

最終去瀏覽器訪問www.hu.com
4 用rancher部署pod
找到工作負載

創建成功之后顯示

然后就可以利用nodeport端口去瀏覽器訪問了
