Kubesphere DevOps组件 创建CI/CD流水线
Kubesphere DevOps组件 创建CI/CD流水线
使用Kubesphere-DevOps组件-创建访问可控的 CI/CD 流水线
DevOps 提供一系列持续集成 (CI) 和持续交付 (CD) 工具,可以使 IT 和软件开发团队之间的流程实现自动化。在 CI/CD 工作流中,每次集成都通过自动化构建来验证,包括编码、发布和测试,从而帮助开发者提前发现集成错误,团队也可以快速、安全、可靠地将内部软件交付到生产环境。
DevOps CI/CD 流水线基于底层 Kubernetes Jenkins Agent 运行。这些 Jenkins Agent 可以动态扩缩,即根据任务状态进行动态供应或释放。Jenkins Controller 和 Agent 以 Pod 的形式运行在 KubeSphere 节点上。Controller 运行在其中一个节点上,其配置数据存储在一个持久卷声明中。Agent 运行在各个节点上,但可能不会一直处于运行状态,而是根据需求动态创建并自动删除。
当 Jenkins Controller 收到构建请求,会根据标签动态创建运行在 Pod 中的 Jenkins Agent 并注册到 Controller 上。当 Agent 运行完任务后,将会被释放,相关的 Pod 也会被删除。
资源分配合理:动态分配已创建的 Agent 至空闲节点,避免因单个节点资源利用率高而导致任务排队等待。
高可扩缩性:当集因资源不足而导致任务长时间排队等待时,支持向集新增节点。
高可用性:当 Jenkins Controller 故障时,DevOps 会自动创建一个新的 Jenkins Controller 容器,并将持久卷挂载至新创建的容器,保证数据不会丢失,从而实现集高可用。
- 创建 DevOps 项目 (点击查看官方文档)
- 查看 DevOps 项目列表 (点击查看官方文档)
- 编辑 DevOps 项目信息(点击查看官方文档)
- 删除 DevOps 项目(点击查看官方文档)
- 创建和管理 DevOps 项目(点击查看官方文档)
- 使用图形编辑面板创建流水线(点击查看官方文档)
- 使用 Jenkinsfile 创建流水线(点击查看官方文档)
使用 Jenkinsfile 创建流水线案例:
代码语言:shell复制pipeline {
agent {
node {
label 'maven'
}
}
stages {
stage('拉取代码') {
agent none
steps {
container('maven') {
// 使用指定的凭证拉取代码,指定分支
// 注意凭证需要先创建
git(url: '.git', credentialsId: 'heyangyi-git-account' , branch: 'dev', changelog: true, poll: false)
sh 'ls -al'
}
}
}
stage('构建镜像') {
agent none
steps {
container('maven') {
// 注意此处Dockerfile文件地址:GRPCS//Dockerfile GRPCS/
sh 'docker build -t $REGISTRY/$DOCKERHUB_AMESPACE/$APP_AME:$BRACH_AME-$BUILD_UMBER -f GRPCS//Dockerfile GRPCS/'
sh 'docker images'
}
}
}
stage('推送-构建编号-镜像') {
agent none
steps {
container('maven') {
withCredentials([usernamePassword(passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERAME' ,credentialsId : "$DOCKER_CREDETIAL_ID" ,)]) {
sh 'echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERAME" --password-stdin'
sh 'docker push $REGISTRY/$DOCKERHUB_AMESPACE/$APP_AME:$BRACH_AME-$BUILD_UMBER'
}
}
}
}
stage('推送-latest-镜像') {
steps {
container('maven') {
sh 'docker tag $REGISTRY/$DOCKERHUB_AMESPACE/$APP_AME:$BRACH_AME-$BUILD_UMBER $REGISTRY/$DOCKERHUB_AMESPACE/$APP_AME:latest '
sh 'docker push $REGISTRY/$DOCKERHUB_AMESPACE/$APP_AME:latest '
}
}
}
stage('部署到Test环境') {
steps {
container('maven') {
//input(id: 'deploy-to-dev', message: 'deploy to dev?')
withCredentials([kubeconfigContent(credentialsId : 'kubeconfig-credential-id' ,variable : 'KUBECOFIG_COFIG' ,)]) {
sh 'mkdir -p ~/.kube/'
sh 'echo "$KUBECOFIG_COFIG" > ~/.kube/config'
// 注意:此处为源代码所在目录的deploy.yaml文件地址
sh 'envsubst < GRPCS//deploy.yaml | kubectl apply -f -'
}
}
}
}
}
environment {
// 阿里云镜像仓库账号密码凭证:用于推送镜像
DOCKER_CREDETIAL_ID = 'aliyun-docker-registry'
// gitee账号密码凭证:用于拉取源代码
GITHUB_CREDETIAL_ID = 'heyangyi-git-account'
// KUBECOFIG:连接和认证Kubernetes集所需的各种参数和凭证信息
KUBECOFIG_CREDETIAL_ID = 'kubeconfig-credential-id'
// 阿里云镜像仓库地址
REGISTRY = 'registry-hongkong.aliyuncs'
// 阿里云镜像仓库命名空间
DOCKERHUB_AMESPACE = 'learn-work'
// APP名称
APP_AME = 'grpcs'
// APP在K8S命名空间:注意在KubeSphere是企业空间下的项目名称,需要先创建
APP_AMESPACE = 'demo-product'
// 副本数
REPLICAS = 1
// 分支名称
BRACH_AME = 'dev'
// ASP.ET CORE 环境名称
ASPETCORE_EVIROMET = 'ASPETCORE_EVIROMET'
// ASP.ET CORE 环境名称值
ASPETCORE_EVIROMET_VALUE = 'Development'
// ASP.ET CORE 环境名称
ASPETCORE_URLS = 'ASPETCORE_URLS'
// ASP.ET CORE 环境名称值
ASPETCORE_URLS_VALUE = 'http://*:8080'
// ASP.ET CORE 环境名称
ASPETCORE_TZ = 'TZ'
// ASP.ET CORE 环境名称值
ASPETCORE_TZ_VALUES = 'Asia/Shanghai'
// APP端口
APP_PORT = '8080'
}
parameters {
string(name: 'TAG_AME', defaultValue: '', description: '')
}
}
上面使用的凭证:aliyun-docker-registry、heyangyi-git-account、kubeconfig-credential-id
deploy.yaml文件案例
代码语言:yaml复制apiVersion: app.k8s.io/v1beta1
kind: Application
metadata:
name: ${APP_AME}
namespace: ${APP_AMESPACE}
labels:
app.kubernetes.io/version: v1
app.kubernetes.io/name: ${APP_AME}
annotati:
servicemesh.kubesphere.io/enabled: "true"
spec:
selector:
matchLabels:
app.kubernetes.io/version: v1
app.kubernetes.io/name: ${APP_AME}
addOwnerRef: true
componentKinds:
- group: ""
kind: Service
- group: apps
kind: Deployment
- group: apps
kind: StatefulSet
- group: extensi
kind: Ingress
- group: servicemesh.kubesphere.io
kind: Strategy
- group: servicemesh.kubesphere.io
kind: ServicePolicy
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: ${APP_AMESPACE}
labels:
version: v1
app: ${APP_AME}
app.kubernetes.io/version: v1
app.kubernetes.io/name: ${APP_AME}
name: ${APP_AME}-v1
annotati:
servicemesh.kubesphere.io/enabled: "true"
spec:
replicas: ${REPLICAS}
selector:
matchLabels:
version: v1
app: ${APP_AME}
app.kubernetes.io/version: v1
app.kubernetes.io/name: ${APP_AME}
template:
metadata:
labels:
version: v1
app: ${APP_AME}
app.kubernetes.io/version: v1
app.kubernetes.io/name: ${APP_AME}
annotati:
sidecar.istio.io/inject: "true"
spec:
containers:
- name: container-${APP_AME}
imagePullPolicy: Always
image: $REGISTRY/$DOCKERHUB_AMESPACE/$APP_AME:$BRACH_AME-$BUILD_UMBER
ports:
- name: grpc-${APP_AME}
protocol: TCP
containerPort: ${APP_PORT}
env:
- name: ${ASPETCORE_EVIROMET}
value: ${ASPETCORE_EVIROMET_VALUE}
- name: ${ASPETCORE_URLS}
value: ${ASPETCORE_URLS_VALUE}
- name: ${ASPETCORE_TZ}
value: ${ASPETCORE_TZ_VALUES}
serviceAccount: default
affinity: {}
initContainers: []
volumes: []
imagePullSecrets:
- name: ${DOCKER_CREDETIAL_ID}
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
---
apiVersion: v1
kind: Service
metadata:
namespace: ${APP_AMESPACE}
labels:
version: v1
app: ${APP_AME}
app.kubernetes.io/version: v1
app.kubernetes.io/name: ${APP_AME}
annotati:
kubesphere.io/serviceType: statelessservice
servicemesh.kubesphere.io/enabled: "true"
name: ${APP_AME}
spec:
sessionAffinity: one
selector:
app: ${APP_AME}
app.kubernetes.io/version: v1
app.kubernetes.io/name: ${APP_AME}
ports:
- name: grpc-${APP_AME}
protocol: TCP
port: 80
targetPort: ${APP_PORT}
---
Kubesphere 扩展组件使用 - CICD - DevOps
注意:安装DevOps扩展组件的过程中遇到一些问题,多数情况是镜像下载不下来,遇到下载不下来的情况下建议在安装过程中查看kubesphere-devops-system项目下容器组的镜像,发现下载不下来的镜像在本机拉取下来,然后导出到本机上传到k8s节点,再还原上去。
代码语言:shell复制#导出单个镜像
docker save -o [输出文件名].tar [镜像名称或ID]
代码语言:shell复制#加载单个镜像
docker load -i [输入文件名].tar
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
上一篇:对称二叉树(C++)
下一篇:二叉树的最大深度(C++)
推荐阅读
留言与评论(共有 20 条评论) |
本站网友 奉化银泰 | 5分钟前 发表 |
credentialsId | |
本站网友 房地产网络 | 27分钟前 发表 |
${APP_PORT} env | |
本站网友 忽略不计 | 15分钟前 发表 |
labels | |
本站网友 刘根宏 | 15分钟前 发表 |
${APP_AME} app.kubernetes.io/version | |
本站网友 斯达舒 | 21分钟前 发表 |
${REPLICAS} selector | |
本站网友 上海浦东租房网 | 13分钟前 发表 |
当 Jenkins Controller 收到构建请求 | |
本站网友 北京羽毛球馆 | 27分钟前 发表 |
app.kubernetes.io/version | |
本站网友 王老菊 | 5分钟前 发表 |
'deploy-to-dev' | |
本站网友 赌石 | 15分钟前 发表 |
指定分支 // 注意凭证需要先创建 git(url | |
本站网友 减肥牛奶 | 16分钟前 发表 |
kubeconfig-credential-iddeploy.yaml文件案例代码语言:yaml复制apiVersion | |
本站网友 王春云 | 17分钟前 发表 |
包括编码 | |
本站网友 辜成允 | 1分钟前 发表 |
DevOps 会自动创建一个新的 Jenkins Controller 容器 | |
本站网友 青藏铁路的意义 | 2分钟前 发表 |
v1 app.kubernetes.io/name | |
本站网友 快疯了 | 0秒前 发表 |
'KUBECOFIG_COFIG' | |
本站网友 金津玉液 | 9分钟前 发表 |
RollingUpdate rollingUpdate | |
本站网友 克丽缇娜美容院招聘 | 11分钟前 发表 |
会根据标签动态创建运行在 Pod 中的 Jenkins Agent 并注册到 Controller 上 | |
本站网友 康菲石油中国有限公司 | 15分钟前 发表 |
servicemesh.kubesphere.io/enabled | |
本站网友 长葛房产网 | 11分钟前 发表 |
apps kind | |
本站网友 莫高窟第45窟 | 30分钟前 发表 |
$BRACH_AME-$BUILD_UMBER ports |