参考博文:链接

零、注意

  1. 由于从Docker GitHub上下载下来的Jenkins镜像,放在K8S中如果重启,那么所有的配置就会没了,所以需要定制化;
  2. 1. docker pull jenkins // 下载镜像
  3. 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插件
  4. 3. 使用Dockerfile构建自定义镜像 // 根据运行中的Jenkins容器生成定制化镜像
  5. 4. docker tag dev-ad-jenkins:1.0.0.0 192.168.10.221:5000/dev-ad-jenkins:1.0.0.0 // 增加tag
  6. 5. docker push 192.168.10.221:5000/dev-ad-jenkins:1.0.0.0 // push镜像到私库
  7. 6. 部署到K8S
  8. 7. 配置jenkinsgitmavenssh(通过ssh将镜像发送到物理机),然后实现docker
  9. 自动化部署镜像(如果不通过ssh发送的话,就得在jenkins的容器中搭建一个docker);
  10. 另外一个方案就是在部署了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