有一段時(shí)間沒(méi)寫了,這個(gè)坑一直在這怪難受的決定把它填了。
大體的搭建流程和先前寫到的 Git Server 大同小異,但細(xì)節(jié)部分不盡相同,有興趣的同僚亦可移步至 這里。
關(guān)于 Kubernetes 的配置請(qǐng)移步至 這里。
作為我近日工作的 Microservices framework 中的重要一環(huán),Jenkins 的搭建自然成為了重中之重。
二話不說(shuō)先上我的 Dockerfile:
FROM jenkins:alpine
MAINTAINER Ralph Wang
# 因?yàn)樵诠竟ぷ鞯年P(guān)系內(nèi)部網(wǎng)絡(luò)經(jīng)常會(huì)阻礙 Container 與外部的連結(jié),遂加下文以設(shè)置代理。
ENV http_proxy ${proxy_address}:${proxy_port}
ENV https_proxy ${proxy_address}:${proxy_port}
USER root
# Download and config kubectl(-s:Silent or quiet mode;-O:Download;-S:Show error)
RUN curl -L -O https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl; chmod +x ./kubectl; mv ./kubectl /usr/local/bin/kubectl
# Download and config docker
RUN curl -sSL -O https://get.docker.com/builds/Linux/x86_64/docker-latest.tgz && tar -xvzf docker-latest.tgz; mv docker/* /usr/bin/ && rm docker-latest.tgz
上述兩個(gè) curl command 分別 download / config 了 kubectl 和 docker 兩個(gè)命令,docker 是用來(lái)在 Jenkins 的任務(wù)過(guò)程中創(chuàng)建 Image,kubectl 是用來(lái)在 Jenkins 的任務(wù)中實(shí)現(xiàn) Deployment 和 Service 的創(chuàng)建。
完成 Dockerfile 之后,我們需要建立此 Image,我將其命名為 jenkinserver。
再來(lái)我們需要用一個(gè) config 文件來(lái)實(shí)現(xiàn)創(chuàng)建 Kubernetes Deployment,下面就是我所編寫的 jenkins-deployment.yaml(切記 .yaml 文件不能使用 Tab):
apiVersion: apps/v1
kind: Deployment
metadata:
? name: jenkins
? labels:
? ? app: jenkins
spec:
? replicas: 1 # 我目前只需要一個(gè) Instance 所以就設(shè)置為1。
? selector:
? ? matchLabels:
? ? ? app: jenkins
? template: # This is the pod template。
? ? metadata:
? ? ? labels:
? ? ? ? app: jenkins
? ? spec:
? ? ? containers:
? ? ? - name: jenkins
? ? ? ? image: jenkinserver # Image 的名字。
? ? ? ? imagePullPolicy: Never # 迫使 Kubernetes 使用本地鏡像。
? ? ? ? ports:
? ? ? ? - containerPort: 8080 # 8080 作為 Web Console 的 Port。
? ? ? ? ? name: web
? ? ? ? ? protocol: TCP
? ? ? ? - containerPort: 50000
? ? ? ? ? name: agent
? ? ? ? ? protocol: TCP
? ? ? ? volumeMounts:
? ? ? ? - mountPath: /var/run/docker.sock # 首先掛載了本地 docker 的接口,以便在 Jenkins Container 中訪問(wèn) docker。
? ? ? ? ? name: docker-sock-volume
? ? ? ? - mountPath: /var/jenkins_home # 其次掛載了 jenkins_home 以便在 Container 被摧毀是不丟失 Jenkins Server 中的內(nèi)容。
? ? ? ? ? name: jenkins-volume
? ? ? ? - mountPath: /var/.kube/config # 最后掛載了外部 Kubernetes 的配置文件,以確保可以在 Jenkins Container 內(nèi)部對(duì)外部的 Kubernetes 進(jìn)行修改。
? ? ? ? ? name: kube-config
? ? ? volumes:
? ? ? - name: docker-sock-volume # Docker sock 卷。
? ? ? ? hostPath:
? ? ? ? ? path: /var/run/docker.sock
? ? ? - name: jenkins-volume # Jenkins 卷。
? ? ? ? hostPath:
? ? ? ? ? path: /c/Users/ralph.wang/.jenkins
? ? ? - name: kube-config # Kubernetes config 卷。
? ? ? ? hostPath:
? ? ? ? ? path: /c/Users/ralph.wang/.kube/config
By running:
kubectl create -f jenkins-deployment.yaml
便可以實(shí)現(xiàn)創(chuàng)建 Deployment,隨后可以通過(guò)
kubectl get deployment jenkins
進(jìn)行確認(rèn)。
建立完 Deployment 之后,需要搭載 Service 來(lái)確??梢栽谕獠窟M(jìn)行連結(jié),下面是我創(chuàng)建的 jenkins-service.yaml:
apiVersion: v1
kind: Service
metadata:
? labels:
? ? app: jenkins
? name: jenkins
spec:
? type: NodePort # 和筆記之三的 GitServer 一樣采用 NodePort 的形式直接曝露 Service。
? ports:
? - port: 8080
? ? targetPort: 8080
? ? nodePort: 32200
? ? name: web
? selector:
? ? app: jenkins
隨后我們可以使用
kubectl create -f jenkins-service.yaml
進(jìn)行服務(wù)的創(chuàng)建,并且使用
kubectl get service jenkins
進(jìn)行服務(wù)的再確認(rèn)。
初始 Jenkins 的時(shí)候會(huì)需要在 console 里輸入初始密碼,這個(gè)密碼可以在?/var/jenkins_home/secrets/initialAdminPassword 中找到(當(dāng)然因?yàn)槲覀冊(cè)谏衔闹惺褂昧?Volume,所以自然可以在本地中瀏覽該文件,即范例中的 /c/Users/ralph.wang/.jenkins/secrets/initialAdminPassword)。
配置完成之后即可開(kāi)始使用啦!
希望能對(duì)大家有所幫助。文章的不足之處也請(qǐng)留言告知,感謝!