持續整合與持續交付備忘錄
一本好書使您改變。它將改變您的思想,您看待問題的角度和方式,最終,它將改改您的行為。然而,所有具有重要意義的改變都不會是在一夜之間發生的,如果您相信這種變革必會發生,不妨朝著這個方向去努力,經常改變,每次改變一點點。
——《持續整合:軟體質量改進和風險降低之道》
CI的價值:
減少風險:缺陷的檢測與修復變得更快;通過持續測試與持續審查,軟體的健康程度可以測量;可以減少不實的假定。
減少重複過程
在任何時間、任何地點生成可部署的軟體
增強專案的可見性
對開發團隊的軟體產品建立起更強大的產品信心
CI的阻礙:
增加了維護開銷
團隊變化太大
失敗的構建太多
額外的軟硬體成本
團隊中7項好的CI實踐:
經常提交程式碼
不要提交無法構建的程式碼
立即修復無法整合的構建
編寫自動化的開發者測試
必須通過所有的測試和審查
執行私有構建
避免簽出無法構建的程式碼
持續構建:
每次程式碼變更均進行自動化構建
將構建過程控制在單行命令下
將構建指令碼從IDE中分離,避免與IDE產生耦合
集中放置軟體資產
建立一致的目錄結構
讓構建快速失敗
針對所有環境構建
使用專門的整合構建計算機
使用CI伺服器
執行快速構建:分離較慢的構建,讓整合構建少於10分鐘
分階段構建
持續資料庫整合:
進行資料庫自動化整合
使用本地資料庫沙盒
將資料庫資產放入版本控制庫
讓開發者能夠修改資料庫
讓開發者成為開發團隊的一員
持續測試:
線性系統的可靠性是每個系統元件的可靠性的乘積,因此特別需要保證底層元件的可靠性
進行自動化單元測試、元件測試、系統測試、功能測試,優先執行測試速度快的測試
為缺陷編寫測試
讓測試元件可以重複
儘量將測試限制為一個斷言
進行程式碼持續審查,對程式碼的複雜度、耦合度、重複度等進行持續審查(sonarQube)
持續部署:
為每一個構建打上標籤
執行測試
建立構建反饋報告
回滾構建的過程能力
持續反饋:
不要讓您的團隊習慣於忽略來自CI構建過程的訊息
需要儘快反饋:持續整合的核心是減少缺陷引入、發現和修復之是的時間間隔
《持續交付:釋出可靠軟體的系統方法》
軟體交付:
每次修改都應該觸發反饋流程
必須儘快接收反饋
互動團隊必須接收反饋並作出反應
無論部署到什麼樣的目標環境,都使用相同的部署方法
軟體交付的原則:
為軟體的釋出建立一個可重複且可靠的過程
將幾乎所有的事情自動化:配置管理自動化、驗收測試自動化、資料庫升降級自動化,對於硬體可採用虛擬化技術和像puppet這樣的工具支撐自動化
將所有的東西都納入版本控制
提前並頻繁地做讓你感到痛苦的事
內建質量:一旦發現缺陷,就要馬上著手修復,交付團隊中的每個人都應該對應用程式的質量負責
Done意味著已釋出
交付過程是每個成員的責任
持續改進:團隊應定期召開會議,反思過去的一段時間哪邊做得好,哪邊需要改進。
配置管理:
對所有內容進行版本控制,包括應用程式的軟體、硬體及基礎設施,與專案相關的所有東西都在版本控制庫中(但是不推薦將原始碼編譯後的二進位制檔案也納入版本控制中)
頻繁提交程式碼到主幹,儘量減少分支
使用意義明顯的提交註釋
以對待程式碼的方式來對待你的系統配置,使其受到正常的管理和測試
將特定於測試環境或生產環境的實際配置存放於與原始碼分離的單獨程式碼庫中
應該嚴格控制生產環境,進行變更過程管理
高效配置管理策略:將二進位制檔案與配置資訊分離;將所有的配置資訊儲存在一處。
基礎設施應該具有自治特性,且非常容易重新搭建
保證配置管理是宣告式且冪等的,即無論基礎設施的初始狀態是什麼樣,執行了配置操作後,基礎設施或系統所處的狀態就一定是你所期望的狀態。
如果版本控制系統允許,儘量選擇樂觀鎖(編輯本地工作副本的一個檔案時不會阻止其它成員對其進行修改)
康威法則:設計系統的組織不可避免地要產生與其組織的溝通結構一樣的設計,即由都坐在一起的小團隊開發出來的產品更趨向於緊耦合、非模組化特點
持續整合:
一、良好的實踐:
構建失敗之後不要提交新程式碼
提交前在本地執行所有的提交測試,或者讓持續整合伺服器完成此事
等提交測試通過後再繼續工作
回家之前,構建必須處於成功狀態
時刻準備著回滾到前一個版本
回滾之前規定一個修復時間
不要將失敗的測試註釋掉
為自己導致的問題負責
測試驅動的開發
二、推薦的實踐:
極限程式設計開發實踐
若違背架構原則,就讓構建失敗
若測試執行變慢,就讓構建失敗
若有編譯警告或程式碼風格問題,就讓測試失敗
測試策略:
一旦同一個測試重複做過多次手工操作,並確信不會花太多時間來維護時,就要把它自動化
單元測試不應該訪問資料庫、使用檔案系統、與外部系統互動
儘可能頻繁地向客戶演示功能
建立一些基本的非功能測試,如容量測試、安全性測試。
提交測試應該避免複雜的資料準備,而是用盡量少的測試資料來斷言被測試的單元正確地完成了所期望的功能
儘可能使用應用程式的公共API為測試建立正確的初始狀態
部署流水線:
只生成一次二進位制包,並將生成的二進位制包存入於製品庫中,之後的測試、部署均基於此二進位制包
對不同環境採用同一種部署方式
對部署進行冒煙測試,這個冒煙測試還應該檢查一下應用程式所依賴的服務是否都已啟動
向生產環境的副本中部署,即先向類生產環境中部署
每次變更都要立即在流水線中傳遞
只要有環節失敗,就停止整個流水線
為儘快加快反饋過程,增加提交階段的測試
通常都應該使用增量的方法來實現部署流水線:構建、部署、單元測試、程式碼審查、驗收測試、釋出等步驟,部署流水線也應該不斷變化,不斷改善與重構
做整體優化,不斷縮短週期時間,即修改一行程式碼到最終部署至線上並生效的時間
確保構建時儘量使用相對路徑
應該儘量將需要管理的構建數量最少化
驗收測試:
寫應用程式驗收條件時必須想著如何使其自動化,並遵循INVEST原則(independentnegotiable valuable estimable small testable)
儘量與GUI解耦
儘量使測試具有原子性,即與測試的執行順序無關
單個測試範圍內,應該避免所有非同步情況,也要避免跨越測試邊界情況
儘早修復失敗的驗收測試
當驗收測試時間需要很長時,考慮使用虛擬化技術進行多環境並行測試
進行容量測試,但需要先進行度量,找到解決方案之前,必須先找出問題的根源,過早的優化是所有罪惡的根源
對於容量測試環境可以採用縮放後的類生產環境,而不是整個叢集
把自動化容量測試作為部署流水線中的一個完成獨立的階段
部署與釋出:
真正執行部署操作的人應該參與部署過程的建立
記錄部署活動
不要刪除舊檔案,而是移動到別的位置
部署是整個團隊的責任
伺服器應用程式不應該有GUI
為新部署留預熱期
快速失敗
不要直接對生產環境進行修改
相關推薦
持續整合與持續交付備忘錄
一本好書使您改變。它將改變您的思想,您看待問題的角度和方式,最終,它將改改您的行為。然而,所有具有重要意義的改變都不會是在一夜之間發生的,如果您相信這種變革必會發生,不妨朝著這個方向去
敏捷開發:持續整合與持續交付
敏捷開發是我們的常聽的名詞,什麼是敏捷開發? 說讓開發更簡化更高效等於沒說。。敏捷開發的關鍵詞是:持續整合與持續交付。 一個Java專案,一個人怎麼搞: 一個人寫程式碼 => 自己打包 => 自己機器編譯=> 自己部署 =>
基於容器服務的持續整合與雲端交付(二)- 多維度打磨交付能力
前言 在上一篇中,和大家一起討論了傳統軟體交付的問題、持續交付的難點、以及為什麼雲端的容器交付可以協助大家快速的持續交付。 但是當真正的將一個系統通過雲端容器交付的時候會發現不能單純的將Docker作為一種交付工具來對待,更多的時候是作為一個交付平臺的基礎設施來看待,還需要關心的是使用Docker後網
AWS CodePipeline 持續整合_持續整合與持續交付
AWS CodePipeline 可幫助您實現軟體釋出流程的自動化,從而使您能夠向用戶快速釋出新功能。憑藉 CodePipeline,您可以快速迭代反饋並將新功能更快地交付給客戶。 自動化構建、測試和釋出過程可使您輕鬆測試每次程式碼更改並捕獲易於修復的小型漏洞。您
持續整合與持續釋出流程
前言 之後的工作中會負責版本控制與釋出,所以根據現有的邏輯整理一下持續整合與釋出的流程。 首先,持續整合,持續釋出,這個概念通過這篇文章有個大致的瞭解https://yq.aliyun.com/articles/72400 自己總結了一下,對於傳統
CI與CD--從持續整合到持續交付
產品研發生命週期演化史: 1 純人肉構建 這是發生在我身上的7年前的故事,我們的專案每週四會發佈一個新版本,大家在每週四的晚上買好乾糧飲料熬夜苦戰。研發人員先提交程式碼,你merge我我merge,忙得不可開交;測試人員們則無事可做耐心等待。夜晚10點鐘,研發人員終於憋出來一個build的過
持續整合、持續交付與持續部署
之前寫了一篇戾氣很重的文章,抱歉。 好久沒有更新了,再次抱歉。 最近在使用Jenkins弄CI,遇到了之前就遇到,但是沒當回事的三個概念,查了一些資料,發現了一些我個人認為比較好的文章,整理了一下,在這裡記錄下。 本文主要綜合
持續整合與devops
持續整合 持續整合(Continuous integration,簡稱C1),簡單的說持續整合就是頻緊地(一天多次)將程式碼整合到主幹,它的好處主要有兩個:1、快速發現錯誤。每完成一次更新,就整合到主幹,可以快速發現錯誤,定位錯誤也比較容易。2、防止分支大幅偏離主幹。如
Jenkins持續整合與構建
jenkins環境 [[email protected] ~]# ls anaconda-ks.cfg jdk-8u171-linux-x64.tar.gz TortoiseSVNv1.9.7.27907.zip install.log
簡單理解持續整合、持續交付、持續部署
「持續整合(Continuous Integration)」、「持續交付(Continuous Delivery)」和「持續部署(Continuous Deployment)」這三個概念有很詳細的解釋。這裡借用文中的插圖,說一下我對這三個概念的理解。 持續整合
談談持續整合、持續交付、持續部署
經常會聽到持續整合,持續交付,持續部署,三者究竟是什麼,有何聯絡和區別呢?什麼是“持續”? 所謂的持續,就是說每完成一個完整的部分,就向下個環節交付,發現問題可以馬上調整。是的問題不會放大到其他部分和後面的環節。 這種做法的核心思想在於:既然事實上難以做到事先完全瞭解完整
持續整合與迭代開發
需求分析 需求調研 敏捷開發 專案啟動會議 很多需求分析的工作是從需求調研開始的,我們就從這裡說起吧。需求調研是需求分析最重要的一環,也最集中地體現了需求分析的特點——既是一份體力活兒,更是一份技術活兒。它既要求我們具有一種理解能力、設計能力,更要求我們具有一
持續整合、持續交付、持續部署
1.持續整合 網際網路軟體的開發和釋出,已經形成了一套標準流程,最重要的組成部分就是持續整合(Continuous integration,簡稱CI)。 持續整合指的是,頻繁地(一天多次)將程式碼整合到主幹。 它的好處主要有兩個: 快速發現錯誤。 防止分支大
持續整合、持續交付GoCD中文網開通啦
如果大家使用過Jenkins那麼相信大家對於持續整合非常熟悉。今天要給大家介紹的是另一個非常強大的CD工具GoCD官方對其也稱之為GO但是要明白他和go語言golang是沒有多大關係的,他是使用java語言開發的。如果你真在使用Jenkins你肯定在疑惑為什麼要
致產品經理: 持續整合、持續交付、持續部署和DevOps
美好的週末又要來臨,小數就不跟大家聊沉甸甸的程式碼了,讓我們輕鬆一下換個話題。今天的主角是產品經理,程式設計師史蒂夫、安妮和喬伊友情客串,報幕員兼跑龍套就是可愛的小數啦,接下來精彩馬上開始—— 即使產品經理每週都在與開發團隊討論新功能,團隊協作緊密無間,在不斷的PUSH下,新功能比以往看起來上線和更新
什麼是持續整合?持續交付?持續部署?
一、概念 持續整合指的是,頻繁地(一天多次)將程式碼整合到主幹。 它的好處主要有兩個。 (1)快速發現錯誤。每完成一點更新,就整合到主幹,可以快速發現錯誤,定位錯誤也比較容易。 (2)防止分支大幅偏離主幹。如果不是經常整合,主幹又在不斷更新,會導致以後整合的難度變大,甚至難以整合。
談談持續整合,持續交付,持續部署之間的區別
經常會聽到持續整合,持續交付,持續部署,三者究竟是什麼,有何聯絡和區別呢? 假如把開發工作流程分為以下幾個階段: 編碼 -> 構建 -> 整合 -> 測試 -> 交付 -> 部署 正如你在上圖中看到,「持續整合(Continuous Integration)」、「持續
CI/CD 持續整合和持續交付 (一)
在網際網路時代,對於每一個企業,公司,產品快速迭代的重要性不言而喻,針對敏捷開發以使用CICD來完成。但是持續整合和持續交付(CI/CD)其實並沒有那麼容易實現,開發和運維總是忙裡忙外,最後還吃力不
持續整合、持續交付、持續部署(CI/CD)簡介
概述: 軟體開發週期中需要一些可以幫助開發者提升速度的自動化工具。其中工具最重要的目的是促進軟體專案的持續整合與交付。通過CI/CD工具,開發團隊可以保持軟體更新並將其迅速的投入實踐中。CI/CD也被認為是敏捷開發的最重要實踐之一。 一
CI/CD 持續整合和持續交付 (二)
根據上次的文章介紹,制定了一套解決方案 此套方案 作為 PaaS 或者SaaS 都是棒棒的,結合著openstack 作為IaaS層 更適合, 整體的思路大概是這樣的,後續會詳細介紹。 客戶或產品有新的需求變更,或者測試人員提出bug時,會在redmine服務上建立提交事