Jenkins:通过Pipeline实现CI/CD流
Sonar:进行代码检查
draft:根据项目自动生成Dockerfile与Helm Chart
Buildah:打包、推送镜像
Helm:部署Chart到Kubernetes集群
beatrueman/builder:1.0
:整合了draft
与buildah
,负责镜像构建与镜像推送
beatrueman/deployer:1.0
:整合了Helm
,用于部署Chart到Kubernetes
sonarsource/sonar-scanner-cli:latest
:用于执行代码检查
jenkins/inbound-agent:3206.vb_15dcf73f6a_9-2
:它是 Jenkins Pipeline 中的一种代理机制,允许在 Jenkins 中动态创建代理节点以执行特定的构建任务。
- 开发人员推送代码到Git仓库,自动触发Jenkins CI/CD流
- SonarQube进行代码检查
- 查找Dockerfile,如果没有则通过Draft自动生成Dockerfile和Helm Chart
- 使用buildah进行镜像打包与镜像推送到Harbor仓库
- 使用Helm将Chart部署在Kubernetes集群上,并把打包好的chart包推送至Harbor
参数化构建
变量名 | 表示值 | 可选项 |
---|---|---|
HARBOR_REGISTRY | Harbor仓库名 | |
PROJECT_NAME | 项目名称 | 必须小写 |
ENTRYPOINT | 项目入口文件(仅用于Python) | app.py或main.py |
PORT | 项目暴露入口 | |
IMAGE_NAME | 镜像名称 | |
TAG | 镜像标签 | |
SONAR_PROJECT_NAME | sonar代码检查项目名称 |
在插件管理中搜索并下载以下插件
Kubermetes:Kubernetes版本4238.v41b_3ef14a_5d8
SonarQube Scanner for Jenkins:SonarQube Scanner for Jenkins版本
- SonarQube凭据保存的内容为在SonarQube中生成的全局令牌
- Harbor-Secret凭据保存Harbor的用户名和密码
- kubeconfig保存最后一步生成的kubeconfig
以使用Kubernerts部署的Jenkins为例(部署方法请自行查询)
1.在系统管理 >> Clouds中新增一个cloud
2.主要填入以下配置
- 名称
- Kubernetes地址:
https://<your_ip>:6443
- Kubernetes命名空间(需要与jenkins部署在同一个命名空间)
- Jenkins地址:Jenkins在K8s部署,填入
http://ClusterIP:Port
(http://10.96.3.38:8080)
。若不在K8s部署,需要将/root/.kube/config
base64编码后保存为凭据,然后再填入jenkins的暴露地址。 - Jenkins通道:填入
10.96.1.180:50000
,注意一定不要加http
将cloud名称填入cloud ""
可以点击连接测试检查是否可以连接集群
1.手工新建一个项目
2.新建一个全局令牌
3.将该令牌生成的token添加进Jenkins的全局凭据中
4.在系统配置中,填入Sonar的服务地址与凭据
使用该工具kubeconfig-generator,生成一个受限制的kubeconfig
- 新建一个命名空间,用于最终项目的部署
- 在
kubeconfig-generator.py
中,指定NAMESPACE
、CLUSTER_SERVER
、SA_NAME
3.将生成的kubeconfig
下载,以secret file
形式添加进Jnekins凭据
4.因为此时的config是受限的,需要生成一个rolebinding
,用于jenkins命名空间下的default用户控制test命名空间下的一些操作
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: jenkins-rolebinding
namespace: test # 控制test命名空间
subjects:
- kind: ServiceAccount
name: default
namespace: jenkins # 这里假设Jenkins服务账户位于jenkins命名空间
roleRef:
kind: ClusterRole
name: edit # 或者你可以定义一个自定义的Role,只包含所需的最小权限
apiGroup: rbac.authorization.k8s.io
builder容器不得不开启privileged,否则无法进行正常的打包与推送镜像。
原因与解决可参考:https://opensource.com/article/19/3/tips-tricks-rootless-buildah