当前位置: 首页 > news >正文

jenkins详解

jenkins原理

jenkins执行任务时,会创建job,这个job是什么

gitlab上项目,邀请成员

jenkins部署

1、创建sa

service account账户,就是pod使用这个账户运行

还需要授予这个账户权限

[root@master01 jenkins]# pwd
/root/apply/jenkins[root@master01 jenkins]# kubectl create ns devops
namespace/devops created[root@master01 jenkins]# cat jenkins-sa.yml 
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: jenkins-admin
rules:- apiGroups: [""]resources: ["*"]verbs: ["*"]
---
apiVersion: v1
kind: ServiceAccount
metadata:name: jenkins-adminnamespace: devops
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: jenkins-admin
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: jenkins-admin
subjects:
- kind: ServiceAccountname: jenkins-adminnamespace: devops
# 都是创建在devops空间下的
kubectl apply -f jenkins-sa.yml

2、创建pvc

直接创建pvc而没有创建pv是因为我采用的动态制备

[root@master01 jenkins]# cat jenkins-pvc.yml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: jenkinsnamespace: devops
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10Gi

3、创建deployment

[root@master01 jenkins]# cat jenkins-deploy.yml 
apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: jenkins-servername: jenkins-servernamespace: devops
spec:replicas: 1selector:matchLabels:app: jenkins-serverstrategy: {}template:metadata:creationTimestamp: nulllabels:app: jenkins-serverspec:volumes:- name: jenkins-datapersistentVolumeClaim:claimName: jenkinsserviceAccountName: jenkins-admincontainers:- image: jenkins/jenkinsimagePullPolicy: IfNotPresentname: jenkinssecurityContext:runAsUser: 0volumeMounts:- name: jenkins-datamountPath: /var/jenkins_homelivenessProbe:httpGet:path: "/login"port: 8080initialDelaySeconds: 90periodSeconds: 10timeoutSeconds: 5failureThreshold: 3readinessProbe:httpGet:path: "/login"port: 8080initialDelaySeconds: 90periodSeconds: 10timeoutSeconds: 5failureThreshold: 3ports:- name: httpcontainerPort: 8080- name: tcpcontainerPort: 50000resources: limits:memory: "2Gi"cpu: "1"requests:memory: "500Mi"cpu: "0.5"
status: {}

查看deploy

# 因为有探针,所以启动的有点慢,等待一下即可
[root@master01 jenkins]# kubectl get pod -n devops
NAME                              READY   STATUS    RESTARTS   AGE
jenkins-server-5db58f78dc-t5dzx   1/1     Running   0          5m13s

4、创建svc

[root@master01 jenkins]# cat jenkins-svc.yml 
apiVersion: v1
kind: Service
metadata:name: jenkins-svcnamespace: devops
spec:selector:app: jenkins-servertype: NodePortports:- name: httpport: 8080targetPort: 8080nodePort: 32000- name: agentport: 50000targetPort: 50000# 容器的8080映射到32000端口上了
[root@master01 jenkins]# kubectl get svc -n devops 
NAME          TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)                          AGE
jenkins-svc   NodePort   10.111.33.72   <none>        8080:32000/TCP,50000:32686/TCP   5m53s

5、登录jenkins

访问32000端口就能访问到了

img

进入容器查看初始密码(在宿主机的挂载目录上面查看也行)

# pv使用的nfs路径,查看nfs路径即可
[root@master01 secrets]# pwd
/nfsdata/devops-jenkins-pvc-40c91a39-07bd-4117-9293-1e9d105da721/secrets
[root@master01 secrets]# cat initialAdminPassword 
906ba40c8e55428abc7daf34504dab23

6、配置jenkins

1、先不安装插件

因为默认插件访问的是google,访问不到

img

点击无,就能取消所有插件的选择

img

2、配置用户

配置管理用户
admin/123

img

img

3、配置中文

img

安装成功后 重启
192.168.50.21:32000/restart

3、配置插件下载地址

默认插件是从国外下载的,将地址改成国内的

1、页面操作

img

点击提交

2、容器内操作

web界面提交后,容器内部的插件镜像源也需要修改,修改了web界面,容器内部才出现这个文件

[root@master01 secrets]# kubectl exec -ti -n devops jenkins-server-5db58f78dc-t5dzx -- /bin/bash# 这个json文件非常的长,根本不是人看的
root@jenkins-server-5db58f78dc-t5dzx:/var/jenkins_home/updates# ls
default.json  hudson.tasks.Maven.MavenInstaller

修改default.json

root@jenkins-server-5db58f78dc-t5dzx:/var/jenkins_home/updates# sed -i 's/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i  's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json 

3、重启jenkins

img

重启后,就能正常下载插件了

4、安装插件

根据自己的场景选择

  • git

  • 中文插件

  • kubernetes

  • pipeline

img

安装完插件之后是需要重启jenkins的,所以建议一次性安装完

5、常用插件

  • Git 拉取代码

  • SSH SSH 远程执行

  • Publish Over SSH

  • Gitlab gitlab插件

  • Maven 对 Maven 项目构建

  • NodeJs 对 NodeJs 项目构建

  • DingTalk 钉钉通知

  • Pipeline 流水线

  • Kubernetes 动态创建代理

  • simple theme 主题

  • Git Parameter 动态从 git 中获取所有分支

  • Managed Scripts 管理脚本插件

  • Deploy to container 热部署插件

  • Extended Choice Parameter 扩展参数构建

  • Role-based Authorization Strategy 权限管理

  • Localization: Chinese (Simplified) 简体中文

  • ansiColor 设置颜色

  • Conditional BuildStep 在pipeline中使用when

  • HTTP Request Plugin:执行http请求并返回响应体,详细用法: https://www.jenkins.io/doc/pipeline/steps/http_request/

  • Pipeline Utility Steps:pipeline中常用的一些工具集,如压缩与解压缩、创建文件、查找文件等;详细用法: https://www.jenkins.io/doc/pipeline/steps/pipeline-utility-steps/

jenkins管理

1、邮件配置

img

smtp设置方法,这里以qq邮箱为例

img

配置邮件通知

系统管理员邮件地址,需要和后面的smtp用户一致,以这个用户发送邮件给别人

img

用户密码为授权码,需要生成的

img

测试,会发送一个测试邮件

img

2、凭据管理(jenkins连接别人)

jenkins的凭据有好几种

  • 账号密码,连接gitlab仓库,新版本的需要密码使用用户token

  • k8s的serviceAccount, jenkins连接k8s集群

  • ssh的用户名密码 ,jenkins连接其他服务器

  • ssh的用户名和私钥 ,Jenkins 远程 SSH 登录别的机器

后续我们的操作是需要和gitlab对接的,添加一个gitlab用户的凭据

img

test_code用户需要再gitlab上存在

img

3、任务测试

简单的测试一下,选择自由分格

img

发现,无法连接,需要使用用户名和用户的token,不能使用用户的密码,新版本的gitlab特性

img

这样就能连接gitlab了

选择gitlab分支

img

构建步骤,选择shell,执行简单的命令,测试一下

img

点击保存,立即构建

img

这个任务是跑在jenkins自己容器的,是一个永久的jenkins项目

# 会创建一个工作区目录,有实际的数据[root@master01 jobs]# pwd
/nfsdata/devops-jenkins-pvc-40c91a39-07bd-4117-9293-1e9d105da721/jobs
[root@master01 jobs]# ls
test_gitlab

后面会讲jenkins对接kubernetes,这个时候,就会创建一个临时pod来执行这个任务

出现的问题

访问master的ip+端口,发现访问不到,但是node节点可以访问到

calico的pod出现了问题

解决方案

  • https://www.cnblogs.com/codertl/p/17021964.html
http://www.jsqmd.com/news/641672/

相关文章:

  • nlp_gte_sentence-embedding_chinese-large一文详解:中文分词对向量质量的影响
  • 终极视频压缩神器CompressO:免费开源的一键瘦身方案,释放95%存储空间
  • 2025届最火的六大降重复率网站横评
  • 通义千问3-VL-Reranker-8B效果展示:建筑图纸+施工照片+工程视频关联排序
  • 3分钟免费搞定:城通网盘直连解析终极指南
  • 处理报错:org.apache.tomcat.util.http.fileupload.impl.FileCountLimitExceededException
  • 国内优质化妆培训学校大盘点 - 品牌测评鉴赏家
  • 论文工具客观红榜:主流工具全维度对比
  • 如何利用 Provide 实现全局主题切换?响应式状态注入的实战技巧
  • 基于 Java 和高德开放平台的 WebAPI 集成实践 —— 以搜索 POI2.0 为例
  • 全网最全MapTR详解!!!
  • 遵义化妆培训学校怎么选?实地探访后的几点观察与建议 - 品牌测评鉴赏家
  • 如何用参数解构在函数入口处直接提取对象属性
  • 2026美妆求学指南:全国优质化妆培训机构大盘点 - 品牌测评鉴赏家
  • 脂溢性脱发救星!这家纹发机构真的绝了 - 品牌测评鉴赏家
  • uni-app怎么做类似于微博的新消息气泡 uni-app角标动画效果实现【代码】
  • 引入注意力机制的YOLOv5小目标检测方法
  • 从手动压枪到智能补偿:罗技鼠标宏如何革新绝地求生射击体验
  • uBlock Origin终极指南:打造零广告浏览体验的完整教程
  • 【手势识别大模型实战生死线】:2026奇点大会验证的8种边缘端部署失败场景及实时修复清单
  • 脱发男士必看!告别头顶危机的新潮秘籍 - 品牌测评鉴赏家
  • 华为云CentOS 7上5分钟搞定Ollama GPU版+Docker部署(附qwen模型实测)
  • 结合自适应锚框机制的YOLOv5优化方法:从原理到实践全解析
  • 视频批量去头去尾工具使用说明:批量裁剪视频开头结尾(秒/毫秒),支持遍历子目录与保持目录结构
  • 关系型数据库核心概念与 MySQL 操作
  • CSS 背景图滑动切换:实现无闪烁、方向可控的平滑轮播效果
  • C#进阶知识 反射
  • 多模态大模型量化压缩技术白皮书(2024Q2权威实测报告:12种算法在COCO-VQA/ScienceQA双基准上的吞吐-精度帕累托前沿)
  • 实战指南:用Markdown Viewer浏览器扩展高效管理技术文档的完整方案
  • 视频帧图片提取工具使用说明:按时间间隔/帧间隔/关键帧/指定时间点/首尾中间帧批量提取,支持并行与保持目录结构