基于K8s + Jenkins+Docker + Gitee 自动部署 - 在K8s中安装Jenkins (一)

基于K8s + Jenkins+Docker + Gitee 自动部署 - 在K8s中安装Jenkins (一)

cc
cc
2022-05-31 / 0 评论 / 339 阅读 / 正在检测是否收录...

背景

目前在开发过程中,每次更新测试环境需要手动执行一个脚本:pull最新的代码、build jar、build docker image最后再基于最新的docker image启动容器。
于是想“偷个懒”,将这些步骤自动化起来:当指定分支收到push后,触发打包、重启docker container.

环境

  • 服务器: k8s集群,有N个node
  • 仓库: Gitee
  • 部署: 部署在集群中的某个node中

一、创建namespace

kubectl create ns jenkins

二、创建Jenkins Deployment & Service

准备配置文件:jenkins.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: jenkins
  name: jenkins-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      nodeName: Your_node_name # 可选,如果不挂载到本地目录,参考文末引用文章 
      containers:
      - name: jenkins
        image: jenkinsci/blueocean:latest
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: jenkins-home
          mountPath: /var/jenkins_home
        - name: docker-sock
          mountPath: /var/run/docker.sock
      volumes: 
        - name: jenkins-home        
          hostPath:
            path: /your/local/file/path # update me
            type: Directory  
        - name: docker-sock # 声明挂载docker
          hostPath: 
            path: /var/run/docker.sock
            type: Socket
---
apiVersion: v1
kind: Service
metadata:
  namespace: jenkins
  name: jenkins
spec:
  type: NodePort
  ports:
    - port: 8080
      targetPort: 8080
      nodePort: 30005 # 在本机上暴露Jenkins对外服务端口
  selector:
    app: jenkins

创建 Deployment & Service:

kubectl create -f jenkins.yaml

注:

  • 这里准备把Jenkins的数据映射到host目录,所以使用hostPath挂载/var/jenkins_home,于是在指定的node上运行pod
  • 由于项目需要打包用到docker,所以将/var/run/docker.sock通过Socket方式挂载到容器(docker in docker)
  • 在Jenkins的pod中执行docker ps -a遇到/var/run/docker.sock: connect: permission denied错误,此时回到host执行:chmod 0777 /var/run/docker.sock赋予权限

三、登录配置

使用浏览器打开:

http://your_k8s_node_ip:port 如:http://127.0.0.1:30005

2022-05-31T07:45:52.png

这里要求输入初始密码:
登录pod的容器,查看对应的密码。图片中告知的路径:/var/lib/jenkins/secrets/initialAdminPassword

# 获取node 名称
[root@cc jenkins]# kubectl get po -n jenkins 
NAME                                 READY   STATUS    RESTARTS   AGE
jenkins-deployment-5db55f9db-7mrk2   1/1     Running   4          4d23h

# 进入pod
[root@cc jenkins]# kubectl exec -it jenkins-deployment-5db55f9db-7mrk2  -c jenkins /bin/bash -n jenkins

# cat 密码
[root@cc jenkins]# cat /var/lib/jenkins/secrets/initialAdminPassword 
  ******

最后,按照推荐进行安装插件即可。

参考:
1、基于k8s安装Jenkins

https://blog.csdn.net/qq_38942551/article/details/107769120
0

评论 (0)

取消