本教程默认您已安装k8s
**
**
1.拉取jenkins镜像
docker pull jenkinsci/jenkins:lts
2.运行jenkins镜像
docker run -tid -p 8080:8080 –name jenkins-master jenkinsci/jenkins:lts
3.访问 jenkins 127.0.0.1:8080
4.获取jenkins初始密钥
docker exec -ti jenkins-master cat /var/jenkins_home/secrets/initialAdminPassword
5.选择 Install suggested plugins
6.设置管理员用户名和密码
7.安装 Kubernetes plugin 插件
系统管理–>管理插件–>可选插件–>输入 Kubernetes plugin –>选择 Kubernetes plugin–>直接安装
8.获取 linux 系统的 kubectl 命令,并复制到 container 中,这里如果无法下载需要给链接加上双引号
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.9.0/bin/linux/amd64/kubectl
docker cp kubectl jenkins-master:/usr/bin
9.进入到容器中安装 libltdl.so.7 库文件不然后边使用 docker-in-docker 方式会报错:error while loading shared libraries: libltdl.so.7: cannot open shared object file: No such file or directory
docker exec -ti jenkins-master
apt-get update
apt-get install libltdl7
apt-get clean
10.将jenkins配置文件拷贝出来,如果使用 NFS 的方式持久化数据,需将此目录放置 NFS 并挂在到 k8s 中,此处 NFS 服务搭建不做过多陈述
docker cp jenkins-master:/var/jenkins_home .
11.打包含有 Kubernetes plugin 插件的 container
docker commit jenkins-master jenkins-k8s-master:1.0
也可使用如下 Dockerfile 直接安装 Kubernetes plugin 插件,但是对于不熟悉的插件名字和插件版本的同学不如上边的方法简单,而且这种方式不会自动安装依赖。
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.9.0/bin/linux/amd64/kubectl
echo Kubernetes plugin:1.1.3 >> plugins.txt
echo Variant Plugin:1.1 >> plugins.txt
cat<< EOF >Dockerfile
FROM jenkins
COPY plugins.txt /usr/share/jenkins/plugins.txt
COPY kubectl /usr/bin/
RUN apt-get update && apt-get install libltdl7 && apt-get clean
RUN /usr/local/bin/plugins.sh /usr/share/jenkins/plugins.txt
EOF
docker build -t jenkins-k8s-master:1.0 .
cat jenkins-deploy.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: jenkins
namespace: ci
labels:
app: jenkins
spec:
strategy:
type: Recreate
template:
metadata:
labels:
app: jenkins
tier: jenkins
spec:
containers:
- image: jenkins-k8s-master:1.0 //这里换成你自己制作的镜像的名称
name: jenkins
securityContext:
privileged: true
ports:
- name: jenkins
containerPort: 8080
- name: agent
containerPort: 50000
protocol: TCP
volumeMounts:
- name: docker
mountPath: /var/run/docker.sock //这里使用docker in docker的方式,将 docker.sock 命令挂在到 image 中
- name: jenkinshome
mountPath: /var/jenkins_home
- name: kube-config
mountPath: /root/.kube
- name: docker-binary
mountPath: /usr/bin/docker //这里使用docker in docker的方式,将docker 命令挂在到 image 中
volumes:
- name: docker
hostPath:
path: /var/run/docker.sock
- name: kube-config
nfs:
server: 10.10.14.216
path: "/data/nfsshare/k8s/.kube" //这里将集群的 .kube 文件通过 nfs的方式挂载到容器中
- name: docker-binary
hostPath:
path: /usr/bin/docker
- name: jenkinshome
nfs:
server: 10.10.14.216
path: "/data/nfsshare/k8s/jenkins/home" //这里将 jenkins 的工作目录挂在到NFS,实现持久化,如果不需要请删除
cat jenkins-service-ingress.yaml
apiVersion: v1
kind: Service
metadata:
name: jenkins-web-ui
namespace: ci
labels:
app: jenkins
spec:
ports:
- port: 8080
targetPort: 8080
name: web-ui
- port: 50000
targetPort: 50000
name: agent
selector:
app: jenkins
tier: jenkins
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: jenkins-web-ui
namespace: ci
spec:
rules:
- host: jenkins.com
http:
paths:
- backend:
serviceName: jenkins-web-ui
servicePort: 8080
部署jenkins-master
kubectl apply -f jenkins-deploy.yaml && kubectl apply -f jenkins-service-ingress.yaml
部署完成后可以在本地 hosts 文件中 加入 x.x.x.x jenkins.com解析
其中 x.x.x.x 为你集群中某一 ip 的地址
在本地浏览器输入 jenkins.com 登录 jenkins
第二部分 http://blog.csdn.net/qq_34605594/article/details/79258596