如何作團隊技術文章分享和沉澱?這是一個老生常談的話題。常見的技術選型能夠是 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 階段,從新選擇本身剛纔建立的雲帳號。
編輯完成後,點擊保存便可。
咱們建立的持續部署流水線主要定義這幾項配置:
當鏡像更新,觸發器自動觸發,持續部署可以直接獲取到本次構建的版本號,經過對 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 持續部署能夠實現更多的應用場景,例如:灰度發佈、藍綠/金絲雀發佈等,咱們將在後續帶給你們更多的實踐內容。