参考博文:链接
零、注意
由于从Docker GitHub上下载下来的Jenkins镜像,放在K8S中如果重启,那么所有的配置就会没了,所以需要定制化;
1. docker pull jenkins // 下载镜像
2. sudo docker run -itd -p 8080:8080 -p 7009:50000 --name jenkins --privileged=true -v /app/developers/liq/jenkins:/var/file jenkins -v /app/developers/liq/jenkins_home:/var/jenkins_home // 在容器中运行,并且挂载相关目录,挂载两个目录,一个为了copy文件,一个为了保存jenkins插件
3. 使用Dockerfile构建自定义镜像 // 根据运行中的Jenkins容器生成定制化镜像
4. docker tag dev-ad-jenkins:1.0.0.0 192.168.10.221:5000/dev-ad-jenkins:1.0.0.0 // 增加tag
5. docker push 192.168.10.221:5000/dev-ad-jenkins:1.0.0.0 // push镜像到私库
6. 部署到K8S
7. 配置jenkins:git、maven、ssh(通过ssh将镜像发送到物理机),然后实现docker
自动化部署镜像(如果不通过ssh发送的话,就得在jenkins的容器中搭建一个docker);
另外一个方案就是在部署了docker的物理机上搭建jenkins,而不是在容器中搭建;
特别注意:
1.因为Jenkins容器不能获得root权限,不能copy外部文件到Jenkins中,所以可挂载其他容器目录,例如:/var/file(如果目录不存在会自动生成)
一、下载Jenkins
$ docker search jenkins // 查找镜像
$ docker pull jenkins // 拉取镜像
$ docker tag jenkins:latest 192.168.10.221:5000/jenkins // 打tag
$ docker push 192.168.10.221:5000/jenkins // 上传镜像到私库
二、通过K8S启动Jenkins
jenkins-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: jenkins
spec:
replicas: 1
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 2
maxUnavailable: 0
template:
metadata:
labels:
app: jenkins
spec:
containers:
- name: jenkins
image: 192.168.10.221:5000/jenkins
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
name: web
protocol: TCP
- containerPort: 50000
name: agent
protocol: TCP
volumeMounts:
- name: jenkinshome
mountPath: /var/jenkins_home
env:
- name: JAVA_OPTS
value: "-Duser.timezone=Asia/Shanghai"
volumes:
- name: jenkinshome
nfs:
server: 192.168.10.223
path: "/opt/jenkins"
其中,nfs的目的是将/var/jenkins_home挂载到192.168.10.223上的/opt/jenkins(nfs的目的是linux之间的目录贡献;这里也可以使用挂载到本机目录来实现)
$ kubectl create -f jenkins-deployment.yaml // 创建pod
$ kubectl get pod -n namespace // 查看pod
jenkins-service.yaml
kind: Service
apiVersion: v1
metadata:
labels:
app: jenkins
name: jenkins
spec:
type: NodePort
ports:
- port: 80
targetPort: 8080
name: jenkins-web
nodePort: 8081
- port: 40000
targetPort: 50000
name: jenkins-agent
nodePort: 40000
selector:
app: jenkins
其中,port是service的端口,targetPort是容器内部服务的端口,nodePort是物理机的端口(可对外)
$ kubectl create -f jenkins-service.yaml // 创建服务
$ kubectl get svc -n namespace // 查看服务
三、Jenkins配置
1、配置GitLab
- 通过Jenkins界面,安装Git Plugin插件(这样Jenkins容器中就有了git)
- 需要进入Jenkins容器,生成ssh公钥、秘钥,将公钥配置到GitLab上
- 在容器内使用git init、git clone 分支名下载一次代码,这样会
将某些key放在容器中,这样Jenkins才能pull下来代码(否则会一直卡顿着)
2、配置Maven
- 通过Jenkins界面,安装Maven
- 进入到Jenkins容器,在~/.m2/下配置settings.xml