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端口就能访问到了

进入容器查看初始密码(在宿主机的挂载目录上面查看也行)
# 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,访问不到

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

2、配置用户
配置管理用户
admin/123


3、配置中文

安装成功后 重启
192.168.50.21:32000/restart
3、配置插件下载地址
默认插件是从国外下载的,将地址改成国内的
1、页面操作

点击提交
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

重启后,就能正常下载插件了
4、安装插件
根据自己的场景选择
-
git
-
中文插件
-
kubernetes
-
pipeline

安装完插件之后是需要重启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、邮件配置

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

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

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

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

2、凭据管理(jenkins连接别人)
jenkins的凭据有好几种
-
账号密码,连接gitlab仓库,新版本的需要密码使用用户token
-
k8s的serviceAccount, jenkins连接k8s集群
-
ssh的用户名密码 ,jenkins连接其他服务器
-
ssh的用户名和私钥 ,Jenkins 远程 SSH 登录别的机器
后续我们的操作是需要和gitlab对接的,添加一个gitlab用户的凭据

test_code用户需要再gitlab上存在

3、任务测试
简单的测试一下,选择自由分格

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

这样就能连接gitlab了
选择gitlab分支

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

点击保存,立即构建

这个任务是跑在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
