• devops学习(三) K8环境部署jenkins


     我们gitlab上的代码通常是经过大量的测试,确认版本后才发布到生产环境

    一、Jenkins CI/CD 概念

    1. 1、CI 的过程就是通过jenkins将代码拉取过来,完成代码编译、测试、打包后构建成镜像交给测试人员
    2. 持续集成: 让软件代码可以持续的集成到主干(master) ,并完成自动构建和测试
    3. 2、CD 过程即是通过jenkins将打好的标签的发行版本拉取、构建、制作镜像交给运维人员部署
    4. 持续交付: 让经过持续集成的代码可以进行手动部署
    5. 持续部署: 让可以持续交付的代码随时随地的自动化部署

     通俗的来说

    1. 1、ci持续"集成" 就是开发每次发代码时都会触发一个任务
    2. 这个任务会自动去拉取最新上传的代码做(编译、测试、打包、构建镜像的操作)
    3. 也就是我们说的:latest版本,最新但不一定稳定
    4. 2、cd持续"交付" 就是开发每次上传新代码都打个标签
    5. 代码上传了N次后,发现最新的几个版本不太稳定,就挑前面正常版本的标签 手动部署
    6. 3、cd持续"部署" 我们持续交付只能指定代码的版本标签,还是要手动部署的,每次都整很麻烦
    7. 持续部署就是实现一套自动化流程,只要指定好要部署的版本,就能自动跑

     二、部署jenkins

    1. //jenkin官方地址
    2. https://www.jenkins.io/
    3. //jenkins插件下载地址
    4. https://plugins.jenkins.io/

    部署

    cd /apps/devops_setup/

    vi jenkins-dev.yaml

    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. name: jenkins
    5. namespace: devops
    6. spec:
    7. selector:
    8. matchLabels:
    9. app: jenkins-init
    10. template:
    11. metadata:
    12. labels:
    13. app: jenkins-init
    14. spec:
    15. containers:
    16. - name: jenkins
    17. image: jenkins/jenkins
    18. ports:
    19. - name: http
    20. containerPort: 8080
    21. volumeMounts:
    22. - name: jenkins-home
    23. mountPath: /var/jenkins_home
    24. volumes:
    25. - name: jenkins-home
    26. hostPath:
    27. path: /apps/devops_setup/data/jenkins/data
    28. type: Directory
    29. ---
    30. apiVersion: v1
    31. kind: Service
    32. metadata:
    33. name: jenkins-svc
    34. namespace: devops
    35. spec:
    36. ports:
    37. - port: 8080
    38. targetPort: http
    39. nodePort: 30004
    40. selector:
    41. app: jenkins-init
    42. type: NodePort

    部署

    1. //创建数据挂载目录,yaml中默认创建的权限不够,需要手动赋予权限
    2. mkdir /apps/devops_setup/data/jenkins/data -p
    3. chmod 777 -R /apps/devops_setup/data/jenkins/data
    4. //部署
    5. kubectl apply -f jenkins-dev.yaml

    添加jenkins 阿里云加速

    cd /apps/devops_setup/data/jenkins/data/

    vi hudson.model.UpdateCenter.xml

    1. '1.1' encoding='UTF-8'?>
    2. default
    3. https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

    重启下pod

     kubectl -n devops delete pod jenkins-59f4db64ff-vcl6c 

    查容器日志

     kubectl -n devops logs jenkins-59f4db64ff-kwjmn

     大致意思是mirrors.tuna.tsinghua.edu.cn 访问不了,登陆容器查看是否能解析

     

    无法解析域名,我们集群默认部署的都是只去集群内部的dns获取解析,无法解析外部域名

    查看容器内部域名解析配置

    cat /etc/resolv.conf

     返回

    1. nameserver 10.96.0.10
    2. search devops.svc.cluster.local svc.cluster.local cluster.local default.svc.cluster.local
    3. options ndots:5

     我们需要让容器去使用我们宿主机上dns解析才能够访问外部域名

     修改jenkins配置

    vi jenkins-dev.yaml

    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. name: jenkins
    5. namespace: devops
    6. spec:
    7. selector:
    8. matchLabels:
    9. app: jenkins-init
    10. template:
    11. metadata:
    12. labels:
    13. app: jenkins-init
    14. spec:
    15. dnsPolicy: Default //添加配置
    16. containers:
    17. - name: jenkins
    18. image: jenkins/jenkins
    19. ports:
    20. - name: http
    21. containerPort: 8080
    22. volumeMounts:
    23. - name: jenkins-home
    24. mountPath: /var/jenkins_home
    25. volumes:
    26. - name: jenkins-home
    27. hostPath:
    28. path: /apps/devops_setup/data/jenkins/data
    29. type: Directory
    30. ---
    31. apiVersion: v1
    32. kind: Service
    33. metadata:
    34. name: jenkins-svc
    35. namespace: devops
    36. spec:
    37. ports:
    38. - port: 8080
    39. targetPort: http
    40. nodePort: 30004
    41. selector:
    42. app: jenkins-init
    43. type: NodePort

    重新部署

    1. kubectl delete -f jenkins-dev.yaml
    2. kubectl apply -f jenkins-dev.yaml

     登陆容器查看解析

    解析配置说明

    1. 1、上面添加的dns策略是让我们容器在启动时去挂载宿主机上的/etc/resolv.conf解析配置
    2. 2、如果不添加,默认则是只使用集群内部的coredns的配置,不提供外部域名解析
    3. 3、如果你容器内部无法链接配置好的加速地址,那么一会访问jenkins会直接显示离线
    4. 4、宿主机上的/etc/resolv.conf配置中需要添加上容器内部的解析配置,防止能解析外部域名了,但是无法解析集群域名的问题
    5. 5、宿主机上/etc/resolv.conf的配置中nameserver必须要放在前两行,不然会失效,具体看图例

    访问jenkins页面

    http://101.43.4.210:30004

    图中有查看密码的路径,需要登陆容器,我们直接去挂载的宿主机去拿

    cat /apps/devops_setup/data/jenkins/data/secrets/initialAdminPassword 
    

     返回

    d02c82da64f844be8d08b9a378c3a6d6

    选择安装模式

    这里选择自定义插件安装,后面我们用什么装什么

     等待一会全部装完,如果网络不好等等原因即使安装失败了也没关系后续再下载

    1. 用户 root
    2. 密码 123456
    3. 密码 123456
    4. 全名 test
    5. 电子邮件地址 123@163.com

    如何离线安装插件

    我这边试验了很多次插件都可以正常安装的,但我早期的时候安装插件就很崩溃( ̄﹃ ̄)

    这里万一有小伙伴前面插件没装上,我们这里就去演示一下

    案例 安装中文插件

    如果你装完打开和我页面一样就不用动如果是一片英文选项就操作一下吧

    卸载中文插件

    删除中文插件需要重启jenkins服务后生效 http://101.43.4.210:30004/restart

     

    登陆jenkins插件官网

    https://plugins.jenkins.io/

    搜索中文插件chinese

    这样我们就得到了一个中文插件的链接地址,我们可以通过其他的方法下载到

    1. //切换jenkins插件目录
    2. cd /apps/devops_setup/data/jenkins/data/plugins/
    3. //拉取插件
    4. wget https://updates.jenkins.io/download/plugins/localization-zh-cn/1.0.24/localization-zh-cn.hpi
    5. //重启jenkins服务
    6. http://101.43.4.210:30004/restart

     

    服务重启后,插件安装完毕

    jenkins安装功能性插件

    1. 1、git parameter //为jenkins 提供 git 项目拉取
    2. 2、Publish Over SSH //为jenkins 提供远程链接主机操作

     整合maven、jdk、jenkins组件

    1. //之前我的maven 和jdk都是放在/root下的
    2. mv /root/maven/ /apps/devops_setup/data/jenkins/data/
    3. mv /root/jdk /apps/devops_setup/data/jenkins/data/

    我们jenkins对应宿主机的挂载目录是/var/jenkins_home/

    所以说,我们实际上是放在了/var/jenkins_home/maven 和/var/jenkins_home/jdk目录

    jenkins全局配置 (指定maven和jdk路径)

    1. //新增jdk全局配置
    2. 名称 jdk
    3. 路径 /var/jenkins_home/jdk
    4. //新增maven全局配置
    5. 名称 maven
    6. 路径 /var/jenkins_home/maven

    jenkins定义远程主机

    我们刚才安装过一个Publish Over SSH插件,这个插件就是用于指定远程服务器的

    当我们maven打好了jar包后,我们要将jar包发送到远程的服务器上做测试部署

     创建远程用户目录

    1. //登陆jenkins主机创建
    2. mkdir /usr/local/test

     定义主机操作演示

    1. 主机名称 test
    2. hostname 101.43.4.210
    3. username root
    4. RemoteDirectory /usr/local/test //这个是jenkins链接到这个服务器时的登陆目录
    5. //如果没有该目录测试会报错
    6. 这里给Use password authentication, or use a different ke 打勾
    7. 然后下面是密码和密钥的配置,我们添加上密码
    8. 添加认证密码信息 "宿主机root用户的密码"

    以上,我们jenkins的基础环境就准备好了( ̄︶ ̄)↗ 


     

  • 相关阅读:
    OpenCV实现图像傅里叶变换
    【JavaEE初阶--多线程初阶】实现一个线程池
    【Excel】【正则】判断手机号是否正确
    Kubernetes学习篇之组件
    结构体
    如何写好一份PPT
    android pcm播放器:有进度条同步、快进、快退、倍速功能
    【GitLab CI/CD、SpringBoot、Docker】GitLab CI/CD 部署SpringBoot应用,部署方式Docker
    SpringBoot整合Junit
    JSP物业服务管理系统myeclipse开发sql数据库BS模式java编程MVC结构
  • 原文地址:https://blog.csdn.net/qq_42883074/article/details/125884893