日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

使用Jenkins,GitHub和Docker的最先进的持续集成和部署管道

發(fā)布時(shí)間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Jenkins,GitHub和Docker的最先进的持续集成和部署管道 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

搭建舞臺(tái)

在過(guò)去的兩年中,我一直在從事Node.js項(xiàng)目。 我們使用GitHub進(jìn)行源管理,使用Jenkins進(jìn)行持續(xù)集成。 我們還有一個(gè)基于Docker和Terraform的部署工具 。

在此期間,我們對(duì)配置進(jìn)行了一些改進(jìn)。 產(chǎn)生積極影響的更改之一是在分支上運(yùn)行CI管道,并在GitHub上查看反饋。

在合并PR之前檢查構(gòu)建的結(jié)果可以防止由于微小錯(cuò)誤而造成的大量損壞。 就像忘記運(yùn)行l(wèi)int或添加新文件一樣。 一旦我們決定自動(dòng)執(zhí)行依賴關(guān)系的更新,反饋將使其變得快速,安全。

在這篇文章中,我將解釋如何使用以下方法配置Continuos集成和部署管道:

  • Jenkins用于構(gòu)建配置。 用于創(chuàng)建構(gòu)建的多分支管道。 Jenkinsfile,用于決定在每個(gè)構(gòu)建中執(zhí)行什么
  • GitHub用于存儲(chǔ)源代碼,檢查構(gòu)建輸出以及將分支合并到master
  • Docker將構(gòu)建與執(zhí)行環(huán)境隔離。 無(wú)論是開(kāi)發(fā)人員機(jī)器還是Jenkins節(jié)點(diǎn)

特征

構(gòu)建管道的配置與源代碼一起進(jìn)行版本控制。 這給您:

  • 舊配置的歷史和回滾功能
  • 配置和源的原子更改
  • 使用分支來(lái)嘗試配置本身

分支機(jī)構(gòu)的建立和反饋意味著您可以:

  • 在代碼審查期間查看構(gòu)建結(jié)果
  • 如果分支破壞了構(gòu)建,則防止分支合并
  • 自動(dòng)合并不間斷的更改

其他小事:

  • 該構(gòu)建被定義為一系列步驟而不是作業(yè),因此一旦開(kāi)始就不會(huì)重新進(jìn)入隊(duì)列
  • 您可以通過(guò)編輯文件而不是使用Jenkins Web UI來(lái)執(zhí)行大多數(shù)構(gòu)建配置

缺點(diǎn)

  • 您需要學(xué)習(xí)Jenkinsfile的語(yǔ)法
  • 您需要注意兩種不同的語(yǔ)法選項(xiàng)(腳本式和聲明式)
  • 有關(guān)如何使用插件的文檔并不總是很清楚,并且通常沒(méi)有任何示例

該應(yīng)用程序

我創(chuàng)建了一個(gè)Node.js Web應(yīng)用程序作為示例。 為了簡(jiǎn)化構(gòu)建,該應(yīng)用程序沒(méi)有外部運(yùn)行時(shí)依賴項(xiàng),例如數(shù)據(jù)庫(kù)或服務(wù)。 可以擴(kuò)展此配置以應(yīng)對(duì)外部依賴性,而不會(huì)影響隔離性。 例如通過(guò)使用Docker Compose設(shè)置依賴關(guān)系。

Dockerfile

FROM node:lts-slim WORKDIR /opt/app COPY package .json yarn.lock ./ RUN yarn COPY . . EXPOSE 8080 CMD yarn start

Docker是最流行的應(yīng)用程序容器化解決方案。 有關(guān)Docker的完整介紹,我推薦Andre Torres的Docker容器 。

在此CI管道中,Docker將應(yīng)用程序代碼與Jenkins節(jié)點(diǎn)隔離。

隔離啟用復(fù)制。 如果在Jenkins中構(gòu)建失敗,并且我們需要調(diào)查失敗,則可以在開(kāi)發(fā)人員機(jī)器上將其復(fù)制,因?yàn)镴enkins節(jié)點(diǎn)及其軟件的狀態(tài)在容器內(nèi)不起作用。

隔離還解決了具有不同運(yùn)行時(shí)環(huán)境的問(wèn)題。 每個(gè)應(yīng)用程序可以在Dockerfile中指定不同版本的Node.js,以用于測(cè)試和部署。

詹金斯檔案

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!' } } }

該常規(guī)文件替換了通常用于在Jenkins中配置作業(yè)的長(zhǎng)Web表單。 此示例中的管道具有三個(gè)階段(構(gòu)建,測(cè)試,部署),每個(gè)階段均由步驟實(shí)現(xiàn)。

部署階段僅在主分支或中繼分支受到影響時(shí)運(yùn)行。 在此示例中,它將映像發(fā)布到hub.docker.com,但您可能會(huì)將其替換為用于部署應(yīng)用程序的基礎(chǔ)結(jié)構(gòu)命令。

管道還具有一個(gè)稱為post的部分,其中包含在構(gòu)建完成后觸發(fā)的諸如always和failure步驟。 這些擴(kuò)展點(diǎn)可以在您的工作流中集成消息傳遞系統(tǒng),例如Slack。

Jenkins設(shè)置

Jenkins需要訪問(wèn)GitHub。 在我的情況下,有效的方法是使用新的GitHub個(gè)人令牌作為密碼,在Jenkins中創(chuàng)建用戶名和密碼憑據(jù)。 這取決于在GitHub中設(shè)置用戶的方式,因此它可能不適用于您的帳戶。 我在CloudBees知識(shí)庫(kù)中找到了詳細(xì)的解釋

配置完憑據(jù)后,就可以在Jenkins中創(chuàng)建新作業(yè)了。 當(dāng)詢問(wèn)類型時(shí),選擇“多分支管道”

Jenkins提供的默認(rèn)設(shè)置對(duì)我的工作流程很明智,因此我對(duì)其進(jìn)行了很少的修改。 如果您習(xí)慣了Jenkins的自由職業(yè),您可能會(huì)對(duì)少量可用選項(xiàng)感到驚訝。 那是因?yàn)槲覀円呀?jīng)在Jenkinsfile中定義了整個(gè)構(gòu)建管道。

您可以配置哪些提交,分支或PR觸發(fā)管道。 使用上面顯示的設(shè)置,在推送到主節(jié)點(diǎn),推送到分支以及創(chuàng)建PR時(shí)將觸發(fā)管道。

保存配置后,最好在GitHub中檢查webhook。 Jenkins將在存儲(chǔ)庫(kù)中配置一個(gè)Webhook,以在推送提交或創(chuàng)建PR后立即觸發(fā)管道。 它要求Jenkins可以從Internet進(jìn)行訪問(wèn),最好使用有效的SSL證書(shū)。

單擊自由樣式的Jenkins作業(yè)時(shí),熟悉的景象就是減少內(nèi)部版本號(hào)的列表。 現(xiàn)在,只需單擊一下即可,因?yàn)槊總€(gè)分支和PR都有自己的內(nèi)部編號(hào)序列。

GitHub中分支的構(gòu)建狀態(tài)通過(guò)鏈接到Jenkins的叉和刻度線報(bào)告。

對(duì)于PR,管道是在與master合并之后運(yùn)行的,并且與PR對(duì)話一起可見(jiàn)。

也可以將GitHub配置為網(wǎng)守,以便無(wú)法合并測(cè)試失敗的PR。 此功能稱為受保護(hù)分支 。

根據(jù)您的工作流程配置管道之后,您就可以開(kāi)始開(kāi)發(fā)應(yīng)用程序了。

然后去哪兒?

最先進(jìn)的技術(shù)并不意味著完美。 這是我目前所知道的最好的事情,我想學(xué)習(xí)更多,并回顧這是邁向更好的一步。

Jenkins是我在該領(lǐng)域使用最多的工具。 使用不同的工具很有可能會(huì)獲得更好的結(jié)果。 我狹窄的經(jīng)驗(yàn)是限制因素。

這篇文章中未涉及的領(lǐng)域是如何使用具有外部依賴項(xiàng)的應(yīng)用程序。 我將在以后的文章中介紹。

在@jaramir或@codurance上發(fā)推文,讓我知道您的想法。

快樂(lè)黑客!

資源資源

  • 示例Node.js項(xiàng)目https://github.com/codurance/jenkins-pipeline-blog
  • Jenkinsfile語(yǔ)法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

總結(jié)

以上是生活随笔為你收集整理的使用Jenkins,GitHub和Docker的最先进的持续集成和部署管道的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。