敏捷開發與 DevOps 實戰

點擊觀看大咖分享

隨着互聯網、移動互聯網的浪潮,軟件工程從瀑布到敏捷發生了巨大的變化,服務器架構也從 IOE 演變到微型機,又發展爲雲計算,運維成本愈來愈低,持續部署逐漸流行起來。本課程主要講解敏捷開發和 DevOps 在實際研發中如何提升效率、下降成本,以及分享互聯網公司的研發流程、崗位分工和技術點,學習業界先進工程技術,提升團隊效率。html

本次騰訊雲大學大咖分享課程邀請 CODING DevOps 架構師 楊周 分享關於「敏捷開發與 DevOps 實戰」課程的內容。python

軟件工程:從瀑布到敏捷

軟件工程從瀑布到敏捷,是對軟件工程效率和軟件交付效率的提高。git

瀑布模型(Waterfall Model)將軟件生命週期劃分爲6個階段:計劃、需求分析、設計、編碼、測試、維護,順序固定,如同瀑布逐級下落。做爲早期軟件工程方法,瀑布在20世紀80年普遍使用,但存在致命的缺點:流程是線性的,到最後才測試和交付開發成果,一旦發現問題爲時已晚,因此沒能很好的解決軟件危機,2003年的統計報告顯示82%的項目延期,和1995年的84%幾乎沒有好轉。web

敏捷開發是按部就班的開發方式,在儘可能短的週期內持續測試和交付「可運行的軟件」,再加上團隊溝通和客戶溝通,從而作到了「擁抱變化」。在敏捷開發中,軟件項目在構建初期被切分紅多個迭代,各個迭代的成果都通過測試,具有可視、可集成和可運行使用的特徵。apache

敏捷開發宣言:編程

  1. 個體和互動:高於流程和工具
  2. 可運行的軟件:高於詳盡的文檔
  3. 客戶合做:高於合同談判
  4. 響應變化:高於遵循計劃

從上面的宣言能夠看出,敏捷開發的核心是人 、協做、時刻可運行的軟件、變化。ubuntu

敏捷開發框架

敏捷是一種思想,不止應用於軟件開發。瀏覽器

敏捷開發框架種類較多,但Scrum使用頻繁度最高。服務器

幻燈片9.JPG

下圖爲 Scrum 框架的流程:markdown

幻燈片10.JPG

互聯網公司的崗位分工和敏捷工做流

主要有產品負責人和開發團隊,具體工做流以下圖所示,而敏捷教練每每由研發工程師或產品經理兼任。

DevOps 自動化上線

實戰:Git項目管理&自動上線

修改一個錯別字須要多久呢?其背後流程又是如何運做的?

首先,使用缺陷管理

其次,建立缺陷

因爲這個文檔項目很簡單,因此採用單分支開發,即 GitHub Flow。具體知識你們能夠掃描下圖中二維碼進行閱讀。

Git commit 怎麼寫才正規?有兩個原則:

一、不要作完幾件事一塊兒提交,而是作完一件事就提交一次,用一句話簡潔地描述

二、詳細的描述在任務裏,關聯任務 ID 便可,因此作任何事以前都應該先建立任務

建議你們安裝使用 git cz 工具,提供了 feat、fix、refactor 等關鍵詞,嚴格按照要求作,通過一段時間就學會了。具體知識你們能夠掃描圖中的二維碼進行閱讀。

最後,合併請求

團隊溝通的效率很是重要,這是敏捷開發的核心價值觀。效率最高的是 面對面交談,而後是電話、即時聊天,最差是郵件。

因此發起代碼合併請求以後,用即時聊天軟件通知同事,請她進行評審,她合併以後,就自動上線了。

敏捷開發之持續交付

持續交付已發展爲DevOps

服務器架構:從自建到雲計算

雅虎開創了 web 1.0 時代,編輯生產內容,免費提供,經過網站廣告營利,這個模式至今仍然是2C消費互聯網的主要商業模式。

若是你們對互聯網發展史感興趣,推薦閱讀《浪潮之巔》,做者是吳軍博士,曾擔任 Google 資深研究員和騰訊副總裁。

雲計算的第一個產品是 雲存儲,第二個產品纔是租服務器。

自建服務器的上線流程

幻燈片26.JPG

雲計算時代的上線流程

能夠發現,雲計算大廠招募運維開發崗,廣大中小團隊和非科技公司點擊開通就可以使用,再也不須要招聘不會編程的普通運維了,因此運維的崗位數量愈來愈少,難就業。

而開發人員會配雲服務器是必備技能,學計算機的同窗請注意。

DevOps

DevOps 自動上線的原理

把一個網站部署到服務器分爲幾步?答:3步。

  1. 打成壓縮包;
  2. SCP 上傳到服務器;
  3. SSH 解壓;

若是使用持續集成,則能夠實現提交代碼時自動上線,原理以下圖:

常見的持續集成有:商業化的 CircleCI、開源的 Jenkins,本文以 Jenkins 雲服務—— CODING 爲例。

一、 DevOps 理念

自動化是核心理念。

二、 DevOps 權限最佳實踐

代碼質量的終極方案:Code Review 和單元測試

一、 現狀的代碼質量低。

二、 提升代碼的終極方案有以下三種。

實戰:像互聯網公司那樣作項目(代碼託管、敏捷開發、DevOps)

像互聯網公司那樣作項目。這些屬於產品經理的工做,對大學專業無要求,推薦感興趣的同窗讀一讀《俞軍產品方法論》

建立團隊

backlog 與迭代

服務器安裝了 Apache,就能夠經過 IP 訪問了,但 IP 都是數字,很差記,因此咱們須要買個域名。

切記:不要用電話號碼、QQ 號這種很長的數字註冊域名,那和 IP 同樣難記,失去了域名的本意。

2012年,騰訊註冊了五位和六位數的QQ號碼.cn域名,結果並很差用,2014年就過時了。具體新聞請掃描喜好閱讀。

域名解析有一個入門技術點:www 實際上是二級域名,根域名是什麼都不帶的,必定要都配上,才能保證用戶輸入哪一個都能訪問。

這個網站很簡單,就是一個 markdown 文檔,Git 提交流程和上一篇實戰同樣,就再也不贅述。Git 提交完畢,咱們來配置一下 Jenkins,建議調試階段使用在線靜態 Jenkinsfile,調試經過之後,再保存到代碼庫裏。

  • 註冊 coding.net,建立一個 Git 倉庫,提交代碼;
  • 建立一個私鑰放在 CODING,把公鑰放在服務器的 .ssh/authorized_keys,實現 SSH 信任,參考文檔:《在持續集成中使用憑據》
  • 新建構建計劃,選擇「使用靜態配置的 Jenkinsfile」,而後可使用「圖形化編輯器」,也可使用「文本編輯器」填入下面代碼,保存並構建;

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 {
        echo '構建中...'
        // 把 markdown 轉成 HTML
        sh 'apt-get update && apt-get install -y python3-pip'
        sh 'pip3 install mkdocs'
        sh 'mkdocs build'
        // 打包成壓縮包
        sh 'tar -zcf tmp.tar.gz apache2/ site/'
        echo '構建完成.'
      }
    }
    stage('部署') {
      steps {
        echo '部署中...'
        script {
          def remote = [:]
          remote.name = 'web-server'
          remote.allowAnyHosts = true
          remote.host = '106.54.86.239'
          remote.user = 'ubuntu'
          // 須要先建立一對 SSH 密鑰,把私鑰放在 CODING 憑據管理,把公鑰放在服務器的 `.ssh/authorized_keys`,實現免密碼登陸
          withCredentials([sshUserPrivateKey(credentialsId: "c4af855d-402a-4f38-9c83-f6226ae3441c", keyFileVariable: 'id_rsa')]) {
            remote.identityFile = id_rsa

            // SSH 上傳文件到遠端服務器
            sshPut remote: remote, from: 'tmp.tar.gz', into: '/tmp/'
            // 解壓縮
            sshCommand remote: remote, command: "tar -zxf /tmp/tmp.tar.gz -C /tmp/"
            sshCommand remote: remote, sudo: true, command: "mkdir -p /var/www/china-speed"
            sshCommand remote: remote, sudo: true, command: "cp -R /tmp/site/* /var/www/china-speed/"
            sshCommand remote: remote, sudo: true, command: "cp -R /tmp/apache2/ /etc/"
            // 重啓 apache2
            sshCommand remote: remote, sudo: true, command: "a2ensite china-speed.org.cn"
            sshCommand remote: remote, sudo: true, command: "a2enmod headers rewrite ssl"
            sshCommand remote: remote, sudo: true, command: "systemctl reload apache2"
          }
        }

        echo '部署完成'
      }
    }
  }
}

通過一番調試,Jenkins 構建成功了,這時候再把它保存在代碼倉庫裏,把設置修改成「使用代碼庫中的 Jenkinsfile」,之後推送代碼便可自動上線。

流量劫持屬於互聯網黑產,2015年,國內某智能路由器廠商劫持404頁面,收集用戶數據並插廣告。後來此廠商的官網也被寬帶運營商劫持插廣告,他們部署了 HTTPS,仍然被劫持,就是由於沒有部署 HSTS 以及禁止 iframe。
當用戶手動輸入域名時,瀏覽器默認請求 HTTP,返回跳轉,但被劫持篡改爲 200,內容改成 iframe 展現 HTTPS 的正常內容,而 iframe 外面展現廣告。更多知識請掃描圖中的二維碼進行閱讀。

  • no-www

2018年9月,Chrome 69 隱藏 www,引起了爭議,讓人覺得真的不用打 www 了,結果不少落後網站沒法訪問,好比學校網站。而後 Chrome 又顯示了 www。到了2019年8月,Chrome 76 再次隱藏 www。理念很簡單:技術應該遷就用戶,而不是遷就那些落後的網站。www 沒有意義,去掉讓用戶更方便更環保。
就像萬維網之父蒂姆在2009年向公衆致歉:網址中 http: 後面的兩條斜線 // 其實不必。「若是這麼多年來人們不用寫或敲入那兩條斜線的話,該能夠省下多少的紙和樹啊。」
因此我建議:你們作網站時,把 www 跳轉到根域名。更多有趣的知識能夠掃碼閱讀。

總結

完整代碼:https://china-speed.coding.net/p/china-speed/d/china-speed/git


問卷

爲了給廣大開發者提供最實用、最熱門前沿、最乾貨的視頻教程,請讓咱們聽到你的須要,感謝您的時間!點擊填寫 問卷

騰訊雲大學是騰訊雲旗下面向雲生態用戶的一站式學習成長平臺。騰訊雲大學大咖分享每週邀請內部技術大咖,爲你提供免費、專業、行業最新技術動態分享。

相關文章
相關標籤/搜索