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

- 1、CI 的过程就是通过jenkins将代码拉取过来,完成代码编译、测试、打包后构建成镜像交给测试人员
-
- 持续集成: 让软件代码可以持续的集成到主干(master) ,并完成自动构建和测试
-
-
- 2、CD 过程即是通过jenkins将打好的标签的发行版本拉取、构建、制作镜像交给运维人员部署
-
- 持续交付: 让经过持续集成的代码可以进行手动部署
-
- 持续部署: 让可以持续交付的代码随时随地的自动化部署
- 1、ci持续"集成" 就是开发每次发代码时都会触发一个任务
-
- 这个任务会自动去拉取最新上传的代码做(编译、测试、打包、构建镜像的操作)
-
- 也就是我们说的:latest版本,最新但不一定稳定
-
-
- 2、cd持续"交付" 就是开发每次上传新代码都打个标签
-
- 代码上传了N次后,发现最新的几个版本不太稳定,就挑前面正常版本的标签 手动部署
-
-
- 3、cd持续"部署" 我们持续交付只能指定代码的版本标签,还是要手动部署的,每次都整很麻烦
-
- 持续部署就是实现一套自动化流程,只要指定好要部署的版本,就能自动跑
- //jenkin官方地址
- https://www.jenkins.io/
-
- //jenkins插件下载地址
- https://plugins.jenkins.io/
cd /apps/devops_setup/
vi jenkins-dev.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: jenkins
- namespace: devops
- spec:
- selector:
- matchLabels:
- app: jenkins-init
- template:
- metadata:
- labels:
- app: jenkins-init
- spec:
- containers:
- - name: jenkins
- image: jenkins/jenkins
- ports:
- - name: http
- containerPort: 8080
- volumeMounts:
- - name: jenkins-home
- mountPath: /var/jenkins_home
- volumes:
- - name: jenkins-home
- hostPath:
- path: /apps/devops_setup/data/jenkins/data
- type: Directory
- ---
- apiVersion: v1
- kind: Service
- metadata:
- name: jenkins-svc
- namespace: devops
- spec:
- ports:
- - port: 8080
- targetPort: http
- nodePort: 30004
- selector:
- app: jenkins-init
- type: NodePort
部署
- //创建数据挂载目录,yaml中默认创建的权限不够,需要手动赋予权限
- mkdir /apps/devops_setup/data/jenkins/data -p
- chmod 777 -R /apps/devops_setup/data/jenkins/data
-
- //部署
- kubectl apply -f jenkins-dev.yaml
cd /apps/devops_setup/data/jenkins/data/
vi hudson.model.UpdateCenter.xml
- '1.1' encoding='UTF-8'?>
-
-
default -
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json -
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
返回
- nameserver 10.96.0.10
- search devops.svc.cluster.local svc.cluster.local cluster.local default.svc.cluster.local
- options ndots:5
我们需要让容器去使用我们宿主机上dns解析才能够访问外部域名
vi jenkins-dev.yaml
- apiVersion: apps/v1
- kind: Deployment
- metadata:
- name: jenkins
- namespace: devops
- spec:
- selector:
- matchLabels:
- app: jenkins-init
- template:
- metadata:
- labels:
- app: jenkins-init
- spec:
- dnsPolicy: Default //添加配置
- containers:
- - name: jenkins
- image: jenkins/jenkins
- ports:
- - name: http
- containerPort: 8080
- volumeMounts:
- - name: jenkins-home
- mountPath: /var/jenkins_home
- volumes:
- - name: jenkins-home
- hostPath:
- path: /apps/devops_setup/data/jenkins/data
- type: Directory
- ---
- apiVersion: v1
- kind: Service
- metadata:
- name: jenkins-svc
- namespace: devops
- spec:
- ports:
- - port: 8080
- targetPort: http
- nodePort: 30004
- selector:
- app: jenkins-init
- type: NodePort
重新部署
- kubectl delete -f jenkins-dev.yaml
- kubectl apply -f jenkins-dev.yaml
登陆容器查看解析

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

图中有查看密码的路径,需要登陆容器,我们直接去挂载的宿主机去拿
cat /apps/devops_setup/data/jenkins/data/secrets/initialAdminPassword
返回
d02c82da64f844be8d08b9a378c3a6d6
这里选择自定义插件安装,后面我们用什么装什么

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


- 用户 root
- 密码 123456
- 密码 123456
- 全名 test
- 电子邮件地址 123@163.com

我这边试验了很多次插件都可以正常安装的,但我早期的时候安装插件就很崩溃( ̄﹃ ̄)
这里万一有小伙伴前面插件没装上,我们这里就去演示一下
案例 安装中文插件
如果你装完打开和我页面一样就不用动,如果是一片英文选项就操作一下吧

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

https://plugins.jenkins.io/
搜索中文插件chinese

这样我们就得到了一个中文插件的链接地址,我们可以通过其他的方法下载到
- //切换jenkins插件目录
- cd /apps/devops_setup/data/jenkins/data/plugins/
-
- //拉取插件
- wget https://updates.jenkins.io/download/plugins/localization-zh-cn/1.0.24/localization-zh-cn.hpi
-
- //重启jenkins服务
- http://101.43.4.210:30004/restart

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

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

- //之前我的maven 和jdk都是放在/root下的
- mv /root/maven/ /apps/devops_setup/data/jenkins/data/
- mv /root/jdk /apps/devops_setup/data/jenkins/data/
我们jenkins对应宿主机的挂载目录是/var/jenkins_home/
所以说,我们实际上是放在了/var/jenkins_home/maven 和/var/jenkins_home/jdk目录
- //新增jdk全局配置
- 名称 jdk
- 路径 /var/jenkins_home/jdk
-
-
- //新增maven全局配置
- 名称 maven
- 路径 /var/jenkins_home/maven

我们刚才安装过一个Publish Over SSH插件,这个插件就是用于指定远程服务器的
当我们maven打好了jar包后,我们要将jar包发送到远程的服务器上做测试部署
创建远程用户目录
- //登陆jenkins主机创建
- mkdir /usr/local/test
定义主机操作演示

- 主机名称 test
- hostname 101.43.4.210
- username root
- RemoteDirectory /usr/local/test //这个是jenkins链接到这个服务器时的登陆目录
- //如果没有该目录测试会报错
-
-
- 这里给Use password authentication, or use a different ke 打勾
-
- 然后下面是密码和密钥的配置,我们添加上密码
-
- 添加认证密码信息 "宿主机root用户的密码"
以上,我们jenkins的基础环境就准备好了( ̄︶ ̄)↗