使用Jenkins,GitHub和Docker的最先进的持续集成和部署管道
搭建舞臺
在過去的兩年中,我一直在從事Node.js項目。 我們使用GitHub進行源管理,使用Jenkins進行持續集成。 我們還有一個基于Docker和Terraform的部署工具 。
在此期間,我們對配置進行了一些改進。 產生積極影響的更改之一是在分支上運行CI管道,并在GitHub上查看反饋。
在合并PR之前檢查構建的結果可以防止由于微小錯誤而造成的大量損壞。 就像忘記運行lint或添加新文件一樣。 一旦我們決定自動執行依賴關系的更新,反饋將使其變得快速,安全。
在這篇文章中,我將解釋如何使用以下方法配置Continuos集成和部署管道:
- Jenkins用于構建配置。 用于創建構建的多分支管道。 Jenkinsfile,用于決定在每個構建中執行什么
- GitHub用于存儲源代碼,檢查構建輸出以及將分支合并到master
- Docker將構建與執行環境隔離。 無論是開發人員機器還是Jenkins節點
特征
構建管道的配置與源代碼一起進行版本控制。 這給您:
- 舊配置的歷史和回滾功能
- 配置和源的原子更改
- 使用分支來嘗試配置本身
分支機構的建立和反饋意味著您可以:
- 在代碼審查期間查看構建結果
- 如果分支破壞了構建,則防止分支合并
- 自動合并不間斷的更改
其他小事:
- 該構建被定義為一系列步驟而不是作業,因此一旦開始就不會重新進入隊列
- 您可以通過編輯文件而不是使用Jenkins Web UI來執行大多數構建配置
缺點
- 您需要學習Jenkinsfile的語法
- 您需要注意兩種不同的語法選項(腳本式和聲明式)
- 有關如何使用插件的文檔并不總是很清楚,并且通常沒有任何示例
該應用程序
我創建了一個Node.js Web應用程序作為示例。 為了簡化構建,該應用程序沒有外部運行時依賴項,例如數據庫或服務。 可以擴展此配置以應對外部依賴性,而不會影響隔離性。 例如通過使用Docker Compose設置依賴關系。
Dockerfile
FROM node:lts-slim WORKDIR /opt/app COPY package .json yarn.lock ./ RUN yarn COPY . . EXPOSE 8080 CMD yarn startDocker是最流行的應用程序容器化解決方案。 有關Docker的完整介紹,我推薦Andre Torres的Docker容器 。
在此CI管道中,Docker將應用程序代碼與Jenkins節點隔離。
隔離啟用復制。 如果在Jenkins中構建失敗,并且我們需要調查失敗,則可以在開發人員機器上將其復制,因為Jenkins節點及其軟件的狀態在容器內不起作用。
隔離還解決了具有不同運行時環境的問題。 每個應用程序可以在Dockerfile中指定不同版本的Node.js,以用于測試和部署。
詹金斯檔案
pipeline { agent any stages { stage( 'Build' ) { steps { sh 'docker build -t codurance/jenkins-pipeline-blog:latest .' } } stage( 'Test' ) { steps { sh 'docker run codurance/jenkins-pipeline-blog:latest yarn test' } } stage( 'Deploy' ) { when { branch 'master' } steps { sh 'docker push codurance/jenkins-pipeline-blog:latest' } } } post { failure { echo 'build is broken. notify team!' 'build is broken. notify team!' } } }該常規文件替換了通常用于在Jenkins中配置作業的長Web表單。 此示例中的管道具有三個階段(構建,測試,部署),每個階段均由步驟實現。
部署階段僅在主分支或中繼分支受到影響時運行。 在此示例中,它將映像發布到hub.docker.com,但您可能會將其替換為用于部署應用程序的基礎結構命令。
管道還具有一個稱為post的部分,其中包含在構建完成后觸發的諸如always和failure步驟。 這些擴展點可以在您的工作流中集成消息傳遞系統,例如Slack。
Jenkins設置
Jenkins需要訪問GitHub。 在我的情況下,有效的方法是使用新的GitHub個人令牌作為密碼,在Jenkins中創建用戶名和密碼憑據。 這取決于在GitHub中設置用戶的方式,因此它可能不適用于您的帳戶。 我在CloudBees知識庫中找到了詳細的解釋
配置完憑據后,就可以在Jenkins中創建新作業了。 當詢問類型時,選擇“多分支管道”
Jenkins提供的默認設置對我的工作流程很明智,因此我對其進行了很少的修改。 如果您習慣了Jenkins的自由職業,您可能會對少量可用選項感到驚訝。 那是因為我們已經在Jenkinsfile中定義了整個構建管道。
您可以配置哪些提交,分支或PR觸發管道。 使用上面顯示的設置,在推送到主節點,推送到分支以及創建PR時將觸發管道。
保存配置后,最好在GitHub中檢查webhook。 Jenkins將在存儲庫中配置一個Webhook,以在推送提交或創建PR后立即觸發管道。 它要求Jenkins可以從Internet進行訪問,最好使用有效的SSL證書。
單擊自由樣式的Jenkins作業時,熟悉的景象就是減少內部版本號的列表。 現在,只需單擊一下即可,因為每個分支和PR都有自己的內部編號序列。
GitHub中分支的構建狀態通過鏈接到Jenkins的叉和刻度線報告。
對于PR,管道是在與master合并之后運行的,并且與PR對話一起可見。
也可以將GitHub配置為網守,以便無法合并測試失敗的PR。 此功能稱為受保護分支 。
根據您的工作流程配置管道之后,您就可以開始開發應用程序了。
然后去哪兒?
最先進的技術并不意味著完美。 這是我目前所知道的最好的事情,我想學習更多,并回顧這是邁向更好的一步。
Jenkins是我在該領域使用最多的工具。 使用不同的工具很有可能會獲得更好的結果。 我狹窄的經驗是限制因素。
這篇文章中未涉及的領域是如何使用具有外部依賴項的應用程序。 我將在以后的文章中介紹。
在@jaramir或@codurance上發推文,讓我知道您的想法。
快樂黑客!
資源資源
- 示例Node.js項目https://github.com/codurance/jenkins-pipeline-blog
- Jenkinsfile語法https://jenkins.io/doc/book/pipeline/syntax/
- Jenkinsfile步驟參考https://jenkins.io/doc/pipeline/steps/
- 多分支管道https://jenkins.io/doc/book/pipeline/multibranch/
翻譯自: https://www.javacodegeeks.com/2019/05/continuous-integration-deployment-pipeline-jenkins-github-docker.html
總結
以上是生活随笔為你收集整理的使用Jenkins,GitHub和Docker的最先进的持续集成和部署管道的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 集成spring mvc_向Spring
- 下一篇: wps表格跨行求和(EXCEL中,表格跨