成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

使用Rancher和DroneCI建立超高速Docker CI/CD流水線

dreamtecher / 552人閱讀

摘要:本文作者為的架構(gòu)師,他分享了使用和建立超高速流水線的經(jīng)驗(yàn)。月日,北京海航萬(wàn)豪酒店,容器技術(shù)大會(huì)即將舉行。

Higher Education(highereducation.com)是一個(gè)連接學(xué)生與高校的入學(xué)申請(qǐng)平臺(tái),通過(guò)引入高意圖和高質(zhì)量的潛在學(xué)生,以及明確、有效的操作,為網(wǎng)站合作的大學(xué)吸引學(xué)生入學(xué)。每年Higher Education為其大學(xué)合作伙伴招收超過(guò)15000名在線學(xué)生入學(xué)申請(qǐng),有7500萬(wàn)高意圖的用戶通過(guò)網(wǎng)站了解大學(xué)入學(xué)項(xiàng)目。

本文作者為Higher Education的架構(gòu)師Will Stern,他分享了Higher Education使用Rancher和DroneCI建立超高速Docker CI/CD流水線的經(jīng)驗(yàn)。

正文

在Higher Education,為了構(gòu)建我們的CI/CD流水線,我們測(cè)試使用了不少CI/CD工具。Rancher和Drone的使用體驗(yàn)是至今為止我們覺(jué)得最簡(jiǎn)單、速度最快、最愉快的。從代碼推送/合并到部署分支的那一刻開(kāi)始,云托管解決方案中將有約一半的時(shí)間在測(cè)試、構(gòu)建和部署上---這一過(guò)程只需三到五分鐘(有些應(yīng)用程序由于更復(fù)雜的構(gòu)建/測(cè)試過(guò)程需要更多時(shí)間)。

搭建Drone環(huán)境的配置和維護(hù)對(duì)我們的開(kāi)發(fā)人員十分友好,在Rancher上安裝Drone就和在Rancher上安裝其他內(nèi)容一樣,非常簡(jiǎn)單。

CI/CD流水線的最大需求點(diǎn)

CI/CD流水線的好壞實(shí)際上是DevOps體驗(yàn)的核心,直接影響到我們開(kāi)發(fā)人員。對(duì)開(kāi)發(fā)人員來(lái)說(shuō),CI/CD流水線最重要的兩點(diǎn)就是速度和簡(jiǎn)易性。

第一點(diǎn)就是速度,畢竟沒(méi)有什么比推送一行代碼需要等待20分鐘才能投入運(yùn)行的體驗(yàn)更糟的了。還有糟糕的一點(diǎn)是,當(dāng)產(chǎn)品出現(xiàn)問(wèn)題時(shí),由于速度過(guò)慢,開(kāi)發(fā)者推出的熱修復(fù)程序在通過(guò)流水線部署時(shí),只會(huì)讓公司的錢損失的更多。

第二點(diǎn)是簡(jiǎn)易性,在理想狀態(tài)下,開(kāi)發(fā)人員可以構(gòu)建和維護(hù)他們的應(yīng)用部署配置。這讓他們更易于使用,畢竟你肯定不會(huì)希望開(kāi)發(fā)人員因某些原因搭建失敗而不斷艾特(Slack)你。

Docker CI/CD流水線的速度痛點(diǎn)

盡管使用不可變?nèi)萜鬟h(yuǎn)遠(yuǎn)優(yōu)于維護(hù)有狀態(tài)的服務(wù)器,但它們還是有一些缺陷---其中最大的一點(diǎn)就是部署速度:相比于簡(jiǎn)單地將代碼推送至現(xiàn)有服務(wù)器上,構(gòu)建并部署容器鏡像的速度更慢。下圖顯示了Docker部署流水線時(shí)需要花費(fèi)時(shí)間的地方:

Docker鏡像倉(cāng)庫(kù)的延遲時(shí)間(步驟1,4,5)可能和構(gòu)建Docker時(shí)花費(fèi)的大量時(shí)間有關(guān),這取決于應(yīng)用程序的大小和搭建所需要的時(shí)間。應(yīng)用程序構(gòu)建時(shí)間(步驟2,3)可能是固定量,不過(guò)也可能受構(gòu)建過(guò)程中可用內(nèi)存或CPU核心的嚴(yán)重影響。

如果你使用的是云托管的CI解決方案,那么你就無(wú)法控制CI服務(wù)器運(yùn)行的位置(鏡像倉(cāng)庫(kù)的延遲可能非常慢),并且可能無(wú)法掌握運(yùn)行服務(wù)器/實(shí)例的類型(應(yīng)用程序構(gòu)建可能很慢)。另外每個(gè)構(gòu)建過(guò)程還將產(chǎn)生大量重復(fù)工作,比如每次構(gòu)建都需要下載基本鏡像。

開(kāi)始Drone CI

和Jenkins工具類似,Drone需要運(yùn)行在你的Rancher基礎(chǔ)設(shè)施上。不同的是,Drone是Docker的原生工具——構(gòu)建過(guò)程的每個(gè)部分都是一個(gè)容器。由于基礎(chǔ)鏡像可以跨搭建甚至跨項(xiàng)目共享,Drone運(yùn)行在你的基礎(chǔ)架構(gòu)上時(shí)就能夠加快構(gòu)建的過(guò)程。如果你將Drone推送到自己的基礎(chǔ)架構(gòu)(如AWS的ECR)上的Docker鏡像倉(cāng)庫(kù),還可以很大程度上地避免延遲。

Drone的Docker本地化還消除了大量的配置兼容問(wèn)題,配過(guò)Jenkins的朋友肯定知道這有多便利。

標(biāo)準(zhǔn)的Drone部署過(guò)程如下所示:

運(yùn)行一個(gè)容器,通知Slack構(gòu)建已經(jīng)開(kāi)始

為“測(cè)試”容器配置某個(gè)基本鏡像,插入代碼并在容器中測(cè)試運(yùn)行

運(yùn)行一個(gè)容器,構(gòu)建和推送生產(chǎn)鏡像(到 Docker Hub、AWS ECR等)

運(yùn)行一個(gè)容器,告訴Rancher升級(jí)服務(wù)

運(yùn)行一個(gè)容器,通知Slack構(gòu)建已經(jīng)完成/失敗

A.drone.yml文件看起來(lái)和docker-compose.yml文件非常類似——一個(gè)容器列表。因?yàn)槊總€(gè)步驟都有專用于該任務(wù)的容器,步驟的配置通常非常簡(jiǎn)單。

啟動(dòng)并運(yùn)行Drone

需要的簡(jiǎn)要操作如下:

注冊(cè)一個(gè)新的Github OAuth app

在Rancher上創(chuàng)建一個(gè)Drone環(huán)境

添加一個(gè)“Drone Server”主機(jī)和一個(gè)或多個(gè)“Drone Worker”主機(jī)

給Drone Server主機(jī)添加drone=server標(biāo)簽

運(yùn)行Drone棧

實(shí)例的大小取決于你——在Higher Education,我們傾向于使用更少、更強(qiáng)大的workers,這樣可以加快構(gòu)建的速度。(我們發(fā)現(xiàn)一個(gè)強(qiáng)大的worker能夠處理7個(gè)團(tuán)隊(duì)的構(gòu)建)

一旦你的drone服務(wù)啟動(dòng),請(qǐng)運(yùn)行這個(gè)棧:

version: "2"
services:
  drone-server:
    image: drone/drone:0.5
    environment:
      DRONE_GITHUB: "true"
      DRONE_GITHUB_CLIENT: 
      DRONE_GITHUB_SECRET: 
      DRONE_OPEN: "true"
      DRONE_ORGS: myGithubOrg
      DRONE_SECRET: 
      DRONE_GITHUB_PRIVATE_MODE: "true"
      DRONE_ADMIN: someuser,someotheruser,
      DRONE_DATABASE_DRIVER: mysql
      DRONE_DATABASE_DATASOURCE: user:password@tcp(databaseurl:3306)/drone?parseTime=true
    volumes:
    - /drone:/var/lib/drone/
    ports:
    - 80:8000/tcp
    labels:
      io.rancher.scheduler.affinity:host_label: drone=server
  drone-agent:
    image: drone/drone:0.5
    environment:
      DRONE_SECRET: 
      DRONE_SERVER: ws://drone-server:8000/ws/broker
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock
    command:
    - agent
    labels:
      io.rancher.scheduler.affinity:host_label_ne: drone=server
      io.rancher.scheduler.global: "true"

這將在你的drone=server主機(jī)上運(yùn)行一個(gè)Drone服務(wù),并為你環(huán)境上的其他每一臺(tái)主機(jī)運(yùn)行一個(gè)drone代理。我們強(qiáng)烈推薦你使用MySQL備份Drone,設(shè)定DATABASE_DRIVER和DATASOURCE值即可實(shí)現(xiàn)。在本例中我們使用了一個(gè)小的RDS實(shí)例。

當(dāng)棧啟動(dòng)運(yùn)行后,你可以登錄到Drone服務(wù)的IP地址,打開(kāi)一個(gè)倉(cāng)庫(kù)用于搭建(從賬戶菜單)。這里你會(huì)注意到Drone UI的每一個(gè)倉(cāng)庫(kù)都沒(méi)有配置。這一切都需要一個(gè).drone.yml文件來(lái)負(fù)責(zé)。

添加搭建配置

我們來(lái)搭建并測(cè)試一個(gè)Node.js項(xiàng)目,添加一個(gè).drone.yml文件到你的倉(cāng)庫(kù),就像這樣:

pipeline:
  build:
    image: node:6.10.0
    commands:
      - yarn install
      - yarn test

文件的內(nèi)容非常簡(jiǎn)潔,你只需在搭建步驟設(shè)置放置倉(cāng)庫(kù)代碼的容器鏡像,指定要在該容器中運(yùn)行的命令即可。

其他的項(xiàng)目也可以由Drone插件管理,這些插件相當(dāng)于針對(duì)一個(gè)任務(wù)的容器。而且因?yàn)椴寮荚贒ocker Hub上,你不需要安裝它們,只需將它們添加到.drone.yml文件中即可。

下面是一個(gè)詳細(xì)使用Slack、ECR和Rancher插件創(chuàng)建.drone.yml的例子:

pipeline:
  slack:
    image: plugins/slack
    webhook: 
    channel: deployments
    username: drone
    template: "<{{build.link}}|Deployment #{{build.number}} started> on  by {{build.author}}"
    when:
      branch: [ master, staging ]
  build:
    image: 
    commands:
      - yarn install
      - yarn test
    environment:
      - SOME_ENV_VAR=some-value
  ecr:
    image: plugins/ecr
    access_key: ${AWS_ACCESS_KEY_ID}
    secret_key: ${AWS_SECRET_ACCESS_KEY}
    repo: 
    dockerfile: Dockerfile
    storage_path: /drone/docker
  rancher:
    image: peloton/drone-rancher
    url: 
    access_key: ${RANCHER_ACCESS_KEY}
    secret_key: ${RANCHER_SECRET_KEY}
    service: core/platform
    docker_image: 
    confirm: true
    timeout: 240
  slack:
    image: plugins/slack
    webhook: 
    channel: deployments
    username: drone
    when:
      branch: [ master, staging ]
      status: [ success, failure ]

盡管上面的代碼已經(jīng)接近40行,但它的可讀性非常強(qiáng),而且其中80%的代碼是拷貝自Drone插件文檔。(如果你想在云托管的CI平臺(tái)中進(jìn)行這些操作,可能需要一天時(shí)間去閱讀文檔)需要注意的是,每個(gè)插件實(shí)際并不需要繁瑣的配置。

如果你要使用Docker Hub而不是ECR,使用Docker插件即可。

以上就是關(guān)于搭建CI/CD流水線的介紹。在幾分鐘內(nèi),你可以啟動(dòng)運(yùn)行具有完整功能的CD流水線。另外,使用Rancher Janitor目錄棧確保你的workers的磁盤空間也是一個(gè)好主意,你只需知道的是,清理的次數(shù)越少,構(gòu)建的速度就會(huì)越快,因?yàn)楦嗟膶右呀?jīng)緩存好了。


9月27日,北京海航萬(wàn)豪酒店,容器技術(shù)大會(huì)Container Day 2017即將舉行。

CloudStack之父、海航科技技術(shù)總監(jiān)、華為PaaS部門部長(zhǎng)、恒豐銀行科技部總經(jīng)理、阿里云PaaS工程總監(jiān)、民生保險(xiǎn)CIO······均已加入豪華講師套餐!

11家已容器落地企業(yè),15位真·云計(jì)算大咖,13場(chǎng)純·技術(shù)演講,結(jié)合實(shí)戰(zhàn)場(chǎng)景,聚焦落地經(jīng)驗(yàn)。免費(fèi)參會(huì)+超高規(guī)格,詳細(xì)議程及注冊(cè)鏈接請(qǐng)戳

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/26996.html

相關(guān)文章

  • 如何使用GitLabRancher構(gòu)建CI/CD水線 – Part 2

    摘要:第一部分的內(nèi)容介紹了如何部署配置和確保在的運(yùn)行。這一部分中,我們將介紹如何使用構(gòu)建容器,以及如何使用容器配置項(xiàng)目。除此之外,我們還將涉及如何用建立容器并部署到上。 這是我們使用GitLab和Rancher構(gòu)建CI/CD流水線系列教程的第二部分。第一部分的內(nèi)容介紹了如何部署、配置和確保GitLab在Rancher的運(yùn)行。這一部分中,我們將介紹如何使用GitLab CI Multi-Run...

    maybe_009 評(píng)論0 收藏0
  • 如何使用GitLabRancher構(gòu)建CI/CD水線–Part 1

    摘要:主機(jī)端口非常昂貴,因此稍后我們會(huì)使用一個(gè)負(fù)載均衡器。注冊(cè)完成后,將的配置添加到負(fù)載均衡器上。部署負(fù)載均衡器在棧中,單擊添加服務(wù)旁邊的下拉菜單,然后選擇添加負(fù)載均衡器。如果你收到狀態(tài)或的錯(cuò)誤報(bào)告,那么需要檢查負(fù)載均衡器配置,確認(rèn)設(shè)置無(wú)誤。 介紹 GitLab核心是集成管理Git存儲(chǔ)庫(kù)的工具。比如你希望創(chuàng)建一個(gè)提供服務(wù)的平臺(tái),那么GitLab將提供強(qiáng)大的身份驗(yàn)證和授權(quán)機(jī)制、工作組、問(wèn)題跟蹤...

    macg0406 評(píng)論0 收藏0
  • Rancher upgrade webhook之CI/CD

    摘要:應(yīng)用鏡像示例應(yīng)用基于官方鏡像,修改了頁(yè)面信息應(yīng)用鏡像推送應(yīng)用鏡像到指定的遠(yuǎn)程鏡像倉(cāng)庫(kù)創(chuàng)建通過(guò)創(chuàng)建,,命令行如下驗(yàn)證服務(wù)打開(kāi)瀏覽器,訪問(wèn)服務(wù),確認(rèn)應(yīng)用的內(nèi)容。驗(yàn)證更新打開(kāi)瀏覽器,訪問(wèn)服務(wù),驗(yàn)證服務(wù)升級(jí)內(nèi)容是否正常。 概述 結(jié)合大家CI/CD的應(yīng)用場(chǎng)景,本篇Blog旨在介紹如何通過(guò)Rancher的webhook微服務(wù)來(lái)實(shí)現(xiàn)CI/CD的聯(lián)動(dòng)。 流程介紹 本次實(shí)踐的主要流程如下: CI/CD...

    sf_wangchong 評(píng)論0 收藏0
  • 超長(zhǎng)干貨:基于Docker的DevOps CI/CD實(shí)踐——來(lái)自iHealth的分享

    摘要:在貓屎氤氳的霧氣里角仰望天花板,手機(jī)微信提醒這次構(gòu)建成功或失敗,并附帶污言穢語(yǔ)。這時(shí)他可以開(kāi)始往工位走,坐下時(shí),微信又會(huì)提醒本次部署到成功或失敗。與企業(yè)微信的集成在決定使用之前,需要知道的是,是一個(gè)高度依賴社區(qū)的項(xiàng)目。 前言 相信我,一切事情的發(fā)生都是趕鴨子上架,沒(méi)有例外。人類所有偉大的變革都是迫不得已,可又是那么順其自然。比如容器(docker)技術(shù)的誕生,比如箭在弦上的創(chuàng)業(yè),比如野...

    Dongjie_Liu 評(píng)論0 收藏0
  • 如何使用Docker、Docker-ComposeRancher搭建部署Pipeline(四)

    摘要:注冊(cè)器監(jiān)視每個(gè)守護(hù)進(jìn)程的事件,并在生命周期事件期間自動(dòng)更新。條件可以包括親和規(guī)則否定至軟強(qiáng)制意味著盡可能地避免。當(dāng)使用通用標(biāo)記如或部署服務(wù)時(shí),可能會(huì)出現(xiàn)意外的后果。月日,北京海航萬(wàn)豪酒店,容器技術(shù)大會(huì)即將舉行。 在這篇文章中,我們將討論如何用Rancher實(shí)現(xiàn)consul的服務(wù)發(fā)現(xiàn)。 如果你還沒(méi)有準(zhǔn)備好,推薦你閱讀本系列中先前的文章:第一篇:CI /CD和Docker入門第二篇:使部署...

    13651657101 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<