如何作团队技术文章分享和沉淀?这是一个老生常谈的话题。常见的技术选型能够是 Confluence、Dokuwiki、Gitbook 等。前端
但对于敏捷团队来讲,这些都不够优雅,咱们但愿能把技术文章像代码同样进行协做和版本管理。更新技术文章后,可以自动部署到公司的 K8S 集群。那么,CODING DevOps + Hexo 必定是你的不二之选,这也是 CODING 目前的实践。git
Hexo 是一个快速、简洁且高效的博客框架。咱们只须要书写 Markdown 格式的技术文章,经过命令可以直接生成静态页面,方便浏览和部署。docker
本文将介绍如何使用 CODING DevOps 创建流水线,推送技术文章到 Git 仓库后,自动触发流水线执行构建并部署到 K8S 集群。npm
git clone https://e.coding.net/wangweicoding/blog.git git remote set-url origin [CODING Git Url] git push
开通 Docker 类型的制品库,并记录仓库地址和制品库名称,将在下一个阶段用到。json
选择“自定义构建过程”,并配置来源使用代码仓库的 Jenkinsfile
后端
项目内的 Jenkinsfile 主要是用来生成静态页面,以及构建镜像并推送镜像到制品库。api
pipeline { agent any stages { stage('检出') { steps { checkout([ $class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]], userRemoteConfigs: [[url: env.GIT_REPO_URL, credentialsId: env.CREDENTIALS_ID]] ]) } } stage('生成静态页面') { steps { script { sh 'npm install -g hexo-cli' # 安装 Hexo sh 'npm install' # 安装依赖 sh 'hexo g' # 生成静态页面 } } } stage('构建') { steps { echo '构建中...' script { // 此处请修改 dockerServer、dockerPath、imageName 替换为本身项目的值 dockerServer = 'wangweicoding-docker.pkg.coding.net' dockerPath = '/blog/blog' imageName = "${dockerServer}${dockerPath}/blog:${env.GIT_BUILD_REF}" def customImage = docker.build(imageName) // 推送 Docker 镜像到仓库 docker.withRegistry("https://${dockerServer}", CODING_ARTIFACTS_CREDENTIALS_ID) { customImage.push() } } } } } }
注意:请将 Jenkinsfile
内变量 dockerServer、dockerPath、imageName 修改成本身的制品库地址、制品库名 、制品名。安全
进入“团队管理” -> "部署设置",配置 Kubernetes 云帐号(Kubeconfig 或 Service Account),以便 CODING 持续部署部署应用到目标集群。hexo
若是你是腾讯云用户,能够按照操做提示一键绑定 TKE 集群。app
进入持续部署控制台,点击“建立应用”,为了方便直接使用本文的部署模板,应用名请输入 blog
,并勾选 支持 Kubernetes 部署
。
应用建立后,接下来建立部署流程:
复制代码仓库的 pipeline.json
的内容,黏贴至部署流程的“编辑 JSON”框内。
注意:界面中的“启动所需制品”和“触发器”须要从新选择本身的项目和仓库,并在部署 deployment 和 services 阶段,从新选择本身刚才建立的云帐号。
编辑完成后,点击保存便可。
咱们建立的持续部署流水线主要定义这几项配置:
配置了 3 个“启动所需制品”,并配置了默认版本。分别是:
当镜像更新,触发器自动触发,持续部署可以直接获取到本次构建的版本号,经过对 deployment 镜像版本的自动绑定,实现自动部署新的镜像。
deploy.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: blog namespace: blog labels: app: blog spec: replicas: 2 selector: matchLabels: app: blog template: metadata: labels: app: blog spec: containers: - name: blog image: wangweicoding-docker.pkg.coding.net/blog/blog/blog # 此处的镜像版本将被自动替换为本次构建的版本。 ports: - containerPort: 80 imagePullSecrets: - name: dockersecret # 集群凭据,须要手动建立
Deployment 中的 image: wangweicoding-docker.pkg.coding.net/blog/blog/blog
,image 会被 CODING 持续部署自动替换为本次构建的镜像版本,实现自动绑定 Docker 制品。因此这里只须要完整的制品 URL 便可,无需 TAG 版本号。
注意:请将 image 修改成本身的 Docker 镜像地址。deployment 文件内使用了 imagePullSecrets ,配置部署前请使用如下方法提早建立。
kubectl create secret docker-registry myregcred \ --docker-server=<your-registry-server> \ --docker-username=<your-name> \ --docker-password=<your-password> \ -n namespace
service.yaml
apiVersion: v1 kind: Service metadata: name: blog namespace: blog spec: selector: app: blog ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer # 提供 Hexo 外网访问 IP
编辑项目 source/_posts/
目录下的文章,并推送到 CODING Git 仓库,此时会自动触发构建,构建成功后,会自动触发博客发布的部署流程。
咱们使用 CODING DevOps 实现了将 Hexo 全自动部署到 K8S 集群,可以很是方便地对技术文章统一管理以及沉淀。不只是 Hexo,其余任意构建为 Docker 镜像的前端和后端项目,均可以用本文的思想进行配置,实现自动触发,自动部署到 K8S 集群。
结合持续部署的“人工确认”阶段,咱们可以很方便地实现发布的审批流,使得发布更加安全。另外,自动触发器不只能够使用 CODING Docker 镜像仓库触发,还可以使用 Webhook 触发。经过 Webhook 调用流水线,能够很是方便地将 CODING 持续部署和内部 CI 系统打通,知足更多的使用场景。
固然,CODING 持续部署能够实现更多的应用场景,例如:灰度发布、蓝绿/金丝雀发布等,咱们将在后续带给你们更多的实践内容。
关于 CODING,了解更多。
关于 CODING,了解更多