jenkins觸發式自動構建python應用鏡像併發布至kubernetes集羣

一、製作Dockerfile文件

1.在172.19.2.51上部署

上傳安裝包至該目錄並解壓

mkdir -pv /opt/git/obd
cd /opt/git/obd
tar zxvf flask.tar.gz

vim Dockerfile
FROM python:2.7
RUN mkdir -pv /opt/flask
ADD flask /opt/flask
RUN pip install flask
RUN pip install Flask-MYSQL
EXPOSE 5000
CMD ["python","/opt/flask/server.py"]

ls /home/app/test/cmdb
Dockerfile  flask  flask.tar.gz

2.測試dockerfile是否能正常工作

docker build -t obd:v1 ./
docker run -p 31500:5000 -idt obd:v1
git add -A
git commit
git push -u origin master
gitlab賬號lvqingshan
密碼abcd1234

二、配置登錄habor倉庫(倉庫爲172.19.2.139)

1.在192.168.13.45上配置倉庫私鑰

mkdir -pv /etc/docker/certs.d/172.19.2.139/
vim /etc/docker/certs.d/172.19.2.139/ca.crt
-----BEGIN CERTIFICATE-----
MIIDvjCCAqagAwIBAgIUQzFZBuFh7EZLOzWUYZ10QokL+BUwDQYJKoZIhvcNAQEL
BQAwZTELMAkGA1UEBhMCQ04xEDAOBgNVBAgTB0JlaUppbmcxEDAOBgNVBAcTB0Jl
aUppbmcxDDAKBgNVBAoTA2s4czEPMA0GA1UECxMGU3lzdGVtMRMwEQYDVQQDEwpr
dWJlcm5ldGVzMB4XDTE3MDcwNDA4NTMwMFoXDTIyMDcwMzA4NTMwMFowZTELMAkG
A1UEBhMCQ04xEDAOBgNVBAgTB0JlaUppbmcxEDAOBgNVBAcTB0JlaUppbmcxDDAK
BgNVBAoTA2s4czEPMA0GA1UECxMGU3lzdGVtMRMwEQYDVQQDEwprdWJlcm5ldGVz
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyWgHFV6Cnbgxcs7X7ujj
APnnMmotzNnnTRhygJLCMpCZUaWYrdBkFE4T/HGpbYi1R5AykSPA7FCffFHpJIf8
Gs5DAZHmpY/uRsLSrqeP7/D8sYlyCpggVUeQJviV/a8L7PkCyGq9DSiU/MUBg4CV
Dw07OT46vFJH0lzTaZJNSz7E5QsekLyzRb61tZiBN0CJvSOxXy7wvdqK0610OEFM
T6AN8WfafTH4qmKWulFBJN1LjHTSYfTZzCL6kfTSG1M3kqG0W4B2o2+TkNLVmC9n
gEKdeh/yQmQWfraRkuWiCorJZGxte27xpjgu7u62sRyCm92xQRNgp5RiGHxP913+
HQIDAQABo2YwZDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBAjAd
BgNVHQ4EFgQUDFiYOhMMWkuq93iNBoC1Udr9wLIwHwYDVR0jBBgwFoAUDFiYOhMM
Wkuq93iNBoC1Udr9wLIwDQYJKoZIhvcNAQELBQADggEBADTAW0FPhfrJQ6oT/WBe
iWTv6kCaFoSuWrIHiB9fzlOTUsicrYn6iBf+XzcuReZ6qBILghYGPWPpOmnap1dt
8UVl0Shdj+hyMbHzxR0XzX12Ya78Lxe1GFg+63XbxNwOURssd9DalJixKcyj2BW6
F6JG1aBQhdgGSBhsCDvG1zawqgZX/h4VWG55Kv752PYBrQOtUH8CS93NfeB5Q7bE
FOuyvGVd1iO40JQLoFIkZuyxNh0okGjfmT66dia7g+bC0v1SCMiE/UJ9uvHvfPYe
qLkSRjIHH7FH1lQ/AKqjl9qrpZe7lHplskQ/jynEWHcb60QRcAWPyd94OPrpLrTU
64g=
-----END CERTIFICATE-----

2.登錄倉庫

docker login 172.19.2.139
Username: admin
Password: Cmcc@1ot

3.上傳鏡像測試

在habor上創建ops倉庫後才能push

docker tag obd:v1 172.19.2.139/ops/obd
docker login -p admin -u Cmcc@1ot -e 172.19.2.139
docker push 172.19.2.139/ops/obd

三、kubernets文件配置

在kubernetes主節點172.19.2.50上配置

vim /opt/kube-obd/obd-rc1.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: obd
spec:
  replicas: 2		#pod數量
  selector:
	app: obd
  template:
	metadata:
	  labels:
		app: obd
	spec:
	  containers:
	  - image: 172.19.2.139/ops/obd:latest		#使用的鏡像
		name: obd
		resources:
		  limits:
			cpu: "2"		#分配給pod的CPU資源
			memory: 2Gi		#分配給pod的內存資源
		ports:
		- containerPort: 5000		#開放的端口

vim /opt/kube-obd/obd-svc1.yaml
apiVersion: v1
kind: Service
metadata:
  name: obd
spec:
  ports:
  - name: obd-svc
	port: 5000
	targetPort: 5000
	nodePort: 31500		#proxy映射出來的端口
  selector:
	app: obd
  type: NodePort		#映射端口類型

四、jenkins配置

1.General中配置參數化構建過程

新增String Parameter

名字:VERSION

默認值:[空]

描述:請輸入版本號

1

2.源碼管理Git設置

Repository URL 爲http://172.19.2.140:18080/lijun/obd.git

2

3.設置Gitlab出現變更自動觸發構建

一分鐘檢測一次gitlab項目是否有變化

*/1 * * * *

34

4.Execute shell設置

兩種控制版本的方式,當自動觸發構建或者版本號爲空時使用時間戳作爲版本,當填入版本號時使用填入的版本號

imagesid=`docker images | grep -i obd | awk '{print $3}'| head -1`
project=/var/lib/jenkins/jobs/odb-docker-build/workspace

if [ -z "$VERSION" ];then
	VERSION=`date +%Y%m%d%H%M`
fi

echo $VERSION

if [ -z "$imagesid" ];then
	echo $imagesid "is null"
else
	docker rmi -f $imagesid 
fi

docker build -t obd:$VERSION $project


docker tag obd:$VERSION 172.19.2.139/ops/obd:$VERSION
docker tag obd:$VERSION 172.19.2.139/ops/obd:latest
docker login -u admin -p Cmcc@1ot 172.19.2.139
docker push 172.19.2.139/ops/obd:$VERSION
docker push 172.19.2.139/ops/obd:latest

5

5.ansible-playbook配置

vim /home/app/ansible/playbooks/obd/obd.yaml
- hosts: 172.19.2.50
  remote_user: app
  sudo: yes
  tasks:
	- name: 關閉原有pod
	  shell: kubectl delete -f /opt/kube-obd
	  ignore_errors: yes
	- name: 啓動新pod
	  shell: kubectl create -f /opt/kube-obd


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章