有一段时间没写了,这个坑一直在这怪难受的决定把它填了。
大体的搭建流程和先前写到的 Git Server 大同小异,但细节部分不尽相同,有兴趣的同僚亦可移步至 这里。
关于 Kubernetes 的配置请移步至 这里。
作为我近日工作的 Microservices framework 中的重要一环,Jenkins 的搭建自然成为了重中之重。
二话不说先上我的 Dockerfile:
FROM jenkins:alpine
MAINTAINER Ralph Wang
# 因为在公司工作的关系内部网络经常会阻碍 Container 与外部的连结,遂加下文以设置代理。
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
上述两个 curl command 分别 download / config 了 kubectl 和 docker 两个命令,docker 是用来在 Jenkins 的任务过程中创建 Image,kubectl 是用来在 Jenkins 的任务中实现 Deployment 和 Service 的创建。
完成 Dockerfile 之后,我们需要建立此 Image,我将其命名为 jenkinserver。
再来我们需要用一个 config 文件来实现创建 Kubernetes Deployment,下面就是我所编写的 jenkins-deployment.yaml(切记 .yaml 文件不能使用 Tab):
apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins
labels:
app: jenkins
spec:
replicas: 1 # 我目前只需要一个 Instance 所以就设置为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 中访问 docker。
name: docker-sock-volume
- mountPath: /var/jenkins_home # 其次挂载了 jenkins_home 以便在 Container 被摧毁是不丢失 Jenkins Server 中的内容。
name: jenkins-volume
- mountPath: /var/.kube/config # 最后挂载了外部 Kubernetes 的配置文件,以确保可以在 Jenkins Container 内部对外部的 Kubernetes 进行修改。
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
便可以实现创建 Deployment,随后可以通过
kubectl get deployment jenkins
进行确认。
建立完 Deployment 之后,需要搭载 Service 来确保可以在外部进行连结,下面是我创建的 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
进行服务的创建,并且使用
kubectl get service jenkins
进行服务的再确认。
初始 Jenkins 的时候会需要在 console 里输入初始密码,这个密码可以在 /var/jenkins_home/secrets/initialAdminPassword 中找到(当然因为我们在上文中使用了 Volume,所以自然可以在本地中浏览该文件,即范例中的 /c/Users/ralph.wang/.jenkins/secrets/initialAdminPassword)。
配置完成之后即可开始使用啦!
希望能对大家有所帮助。文章的不足之处也请留言告知,感谢!