目录
前言
本次所有操作都是在K8S 1.26.14 上面操作,安装方法使用K8S包管理工具(Helm)。
Helm安装方法,直接安装最新版就可以,我这个可能稍微有点老了。
Ceph 存储部署方法这个可能也有点老了,测试环境直接部署最新版本即可。
Jenkins 官网:https://www.jenkins.io
本次安装完以后就是就是Jenkins+slave模式,不需要配置。
镜像下载不下来的私信我
Helm 部署方法
配置Helm
helm repo add jenkinsci https://charts.jenkins.io
helm repo update
下载Jenkins包
## 可以先查看一下当前版本
helm search repo jenkinsci
## 下载
helm pull jenkinsci/jenkins
修改 Jenkins 配置并部署
tar -xf jenkins-5.5.4.tgz && cd jenkins
vim values.yaml
## 只是修改了 1227行 storageClass: "rook-ceph-rbd" 动态存储
## 和1235行 size: "15Gi" 动态存储的容量大小
## 其他啥也没动
## 开始安装
kubectl create ns jenkins
helm install jenkins -n jenkins .
部署Ingress
要是懒得弄直接用 NodePort 即可。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: jenkins-ingress
namespace: jenkins
spec:
ingressClassName: nginx
rules:
- host: jenkins.beijing1.cn
http:
paths:
- backend:
service:
name: jenkins
port:
name: http
path: /
pathType: Prefix
tls:
- hosts:
- jenkins.beijing1.cn
配置号 Hosts 访问即可
部署成功以后登陆
首次登陆查看密码,默认账号是:admin
jsonpath="{.data.jenkins-admin-password}"
secret=$(kubectl get secret -n jenkins jenkins -o jsonpath=$jsonpath)
echo $(echo $secret | base64 --decode)
问题记录
错误日志
2024-09-20 08:20:21.326+0000 [id=63] INFO i.k.c.i.cache.ReflectorRunnable#run: class io.kubernetes.client.models.V1Secret#Start listing and watching...
2024-09-20 08:20:21.327+0000 [id=63] SEVERE i.k.c.i.cache.ReflectorRunnable#run: class io.kubernetes.client.models.V1Secret#Failed to list-watch: {}
io.kubernetes.client.ApiException: Forbidden
at PluginClassLoader for alauda-kubernetes-support//io.kubernetes.client.ApiClient.handleResponse(ApiClient.java:882)
at PluginClassLoader for alauda-kubernetes-support//io.kubernetes.client.ApiClient.execute(ApiClient.java:798)
at PluginClassLoader for alauda-kubernetes-support//io.kubernetes.client.informer.SharedInformerFactory$1.list(SharedInformerFactory.java:115)
at PluginClassLoader for alauda-kubernetes-support//io.kubernetes.client.informer.cache.ReflectorRunnable.run(ReflectorRunnable.java:47)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.runAndReset(Unknown Source)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
解决方法
K8S 部署的时候可能出现RBAC权限的问题,添加一个集群级别的权限或者在values.yaml 配置文件里面修改好,我这个已经部署好了就直接修改了。
cat jenkins-secret-reader.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: jenkins-secret-reader
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "list", "watch"]
当前版本部署的jenkins使用的ServiceAccount名字是:jenkins,其他的名字自己按需修改。
cat jenkins-secret-reader-binding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: jenkins-secret-reader-binding
subjects:
- kind: ServiceAccount
name: jenkins # 替换为 Jenkins 使用的 ServiceAccount 名称
namespace: jenkins # 替换为 Jenkins 所在的命名空间
roleRef:
kind: ClusterRole
name: jenkins-secret-reader
apiGroup: rbac.authorization.k8s.io
部署好以后重启 jenkins 容器即可。
kubectl rollout restart sts -n jenkins jenkins-0
常用插件的安装
Active Choices
Blue Ocean
Blue Ocean Core JS
Blue Ocean Pipeline Editor
Build Pipeline
dashboard
Autofavorite for Blue Ocean
Git Parameter
Declarative Pipeline Migration Assistant API
Declarative Pipeline Migration Assistant
Delivery Pipeline
SSH Pipeline Steps
Hidden Parameter
Kubernetes CLI
Kubernetes Credentials Provider
Parameterized Remote Trigger
还有好多常用插件,目前我也想不到了。
其他方式安装的 Jenkins 配置 K8S 方法
多个K8S集群重复下面配置即可,把名字修改了就行。
添加K8S凭据到Jenkins
首先生成证书
## 生成 PKCS 证书,然后拷贝到自己电脑一会需要用到
## 执行的时候需要输入密码 将密码记住。
cd /etc/kubernetes/pki/
openssl pkcs12 -export -out /tmp/default.pfx -inkey admin-key.pem -in admin.pem -certfile ca.pem
依次 点击 Manage Jenkins > Credentials > System > Global credentials (unrestricted)
然后点击 Add Credentials
点击到这个页面,修改参数如下:
- kind 修改为:Certificate
- Scope 不动
- Certificate 点击 PKCS那列并上传刚刚用命令生成的证书
- Password 输入刚刚生成证书的密码
都修改好以后点击创建即可
打开jenkins 配置 点击 Manage Jenkins 网下面滑
点击 Clouds
修改 K8S 配置
需要修改配置如下:
- 名字根据需求修改
- Kubernetes 地址 根据自己的粘贴即可 (使用这个命令也可以查看 kubectl cluster-info )
- Kubernetes 服务证书 key “cat /etc/kubernetes/pki/ca.pem”
- 凭据 添加刚刚生成的那个凭据
- 截图的下面还有个Jenkins地址 添加自己的即可
- Kubernetes Namespace:指定 Jenkins Agent 将在哪个 Namespace 中运行。如果不指定,使用默认的 default Namespace。
全部修改还以后在页面中间位置右下角 有一个链接测试 测试没问题即可
修改Jenkins-slave端口
依次 点击 Manage Jenkins > Security
一般都设置固定端口方便防火墙配置,也可以设置随机端口,到此配置完成。
重置管理员密码
修改 config.xml
手动重置密码
-
进入管理员的
config.xml
文件:vi $JENKINS_HOME/users/admin/config.xml
-
替换
<passwordHash>
内容为一个已知的密码的哈希值。
示例:将 bcrypt 哈希替换为空密码或简单密码的哈希:
空密码:
<passwordHash>#jbcrypt:</passwordHash>
密码 admin123
的 bcrypt 哈希(可使用 在线 bcrypt 生成工具 生成):
<passwordHash>#jbcrypt:$2a$10$zG5c5DFLEHVY/LTZdNhtjOXGZ5LxSY69gZy.qfySCfQ/yNh5NGoXi</passwordHash>
- 保存文件并重启 Jenkins:
sudo systemctl restart jenkins
如果上面的方法不行可以尝试直接删除 $JENKINS_HOME/users/admin开头的文件夹
然后用下面的命令获取密码(容器部署的才可以这样操作,注意备份)
jsonpath="{.data.jenkins-admin-password}"
secret=$(kubectl get secret -n jenkins jenkins -o jsonpath=$jsonpath)
echo $(echo $secret | base64 --decode)