国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

dreamtecher / 547人閱讀

摘要:本文作者為的架構師,他分享了使用和建立超高速流水線的經驗。月日,北京海航萬豪酒店,容器技術大會即將舉行。

Higher Education(highereducation.com)是一個連接學生與高校的入學申請平臺,通過引入高意圖和高質量的潛在學生,以及明確、有效的操作,為網站合作的大學吸引學生入學。每年Higher Education為其大學合作伙伴招收超過15000名在線學生入學申請,有7500萬高意圖的用戶通過網站了解大學入學項目。

本文作者為Higher Education的架構師Will Stern,他分享了Higher Education使用Rancher和DroneCI建立超高速Docker CI/CD流水線的經驗。

正文

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

搭建Drone環境的配置和維護對我們的開發人員十分友好,在Rancher上安裝Drone就和在Rancher上安裝其他內容一樣,非常簡單。

CI/CD流水線的最大需求點

CI/CD流水線的好壞實際上是DevOps體驗的核心,直接影響到我們開發人員。對開發人員來說,CI/CD流水線最重要的兩點就是速度和簡易性。

第一點就是速度,畢竟沒有什么比推送一行代碼需要等待20分鐘才能投入運行的體驗更糟的了。還有糟糕的一點是,當產品出現問題時,由于速度過慢,開發者推出的熱修復程序在通過流水線部署時,只會讓公司的錢損失的更多。

第二點是簡易性,在理想狀態下,開發人員可以構建和維護他們的應用部署配置。這讓他們更易于使用,畢竟你肯定不會希望開發人員因某些原因搭建失敗而不斷艾特(Slack)你。

Docker CI/CD流水線的速度痛點

盡管使用不可變容器遠遠優于維護有狀態的服務器,但它們還是有一些缺陷---其中最大的一點就是部署速度:相比于簡單地將代碼推送至現有服務器上,構建并部署容器鏡像的速度更慢。下圖顯示了Docker部署流水線時需要花費時間的地方:

Docker鏡像倉庫的延遲時間(步驟1,4,5)可能和構建Docker時花費的大量時間有關,這取決于應用程序的大小和搭建所需要的時間。應用程序構建時間(步驟2,3)可能是固定量,不過也可能受構建過程中可用內存或CPU核心的嚴重影響。

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

開始Drone CI

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

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

標準的Drone部署過程如下所示:

運行一個容器,通知Slack構建已經開始

為“測試”容器配置某個基本鏡像,插入代碼并在容器中測試運行

運行一個容器,構建和推送生產鏡像(到 Docker Hub、AWS ECR等)

運行一個容器,告訴Rancher升級服務

運行一個容器,通知Slack構建已經完成/失敗

A.drone.yml文件看起來和docker-compose.yml文件非常類似——一個容器列表。因為每個步驟都有專用于該任務的容器,步驟的配置通常非常簡單。

啟動并運行Drone

需要的簡要操作如下:

注冊一個新的Github OAuth app

在Rancher上創建一個Drone環境

添加一個“Drone Server”主機和一個或多個“Drone Worker”主機

給Drone Server主機添加drone=server標簽

運行Drone棧

實例的大小取決于你——在Higher Education,我們傾向于使用更少、更強大的workers,這樣可以加快構建的速度。(我們發現一個強大的worker能夠處理7個團隊的構建)

一旦你的drone服務啟動,請運行這個棧:

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主機上運行一個Drone服務,并為你環境上的其他每一臺主機運行一個drone代理。我們強烈推薦你使用MySQL備份Drone,設定DATABASE_DRIVER和DATASOURCE值即可實現。在本例中我們使用了一個小的RDS實例。

當棧啟動運行后,你可以登錄到Drone服務的IP地址,打開一個倉庫用于搭建(從賬戶菜單)。這里你會注意到Drone UI的每一個倉庫都沒有配置。這一切都需要一個.drone.yml文件來負責。

添加搭建配置

我們來搭建并測試一個Node.js項目,添加一個.drone.yml文件到你的倉庫,就像這樣:

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

文件的內容非常簡潔,你只需在搭建步驟設置放置倉庫代碼的容器鏡像,指定要在該容器中運行的命令即可。

其他的項目也可以由Drone插件管理,這些插件相當于針對一個任務的容器。而且因為插件都在Docker Hub上,你不需要安裝它們,只需將它們添加到.drone.yml文件中即可。

下面是一個詳細使用Slack、ECR和Rancher插件創建.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 ]

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

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

以上就是關于搭建CI/CD流水線的介紹。在幾分鐘內,你可以啟動運行具有完整功能的CD流水線。另外,使用Rancher Janitor目錄棧確保你的workers的磁盤空間也是一個好主意,你只需知道的是,清理的次數越少,構建的速度就會越快,因為更多的層已經緩存好了。


9月27日,北京海航萬豪酒店,容器技術大會Container Day 2017即將舉行。

CloudStack之父、海航科技技術總監、華為PaaS部門部長、恒豐銀行科技部總經理、阿里云PaaS工程總監、民生保險CIO······均已加入豪華講師套餐!

11家已容器落地企業,15位真·云計算大咖,13場純·技術演講,結合實戰場景,聚焦落地經驗。免費參會+超高規格,詳細議程及注冊鏈接請戳

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26996.html

相關文章

  • 如何使用GitLabRancher構建CI/CD水線 – Part 2

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

    maybe_009 評論0 收藏0
  • 如何使用GitLabRancher構建CI/CD水線–Part 1

    摘要:主機端口非常昂貴,因此稍后我們會使用一個負載均衡器。注冊完成后,將的配置添加到負載均衡器上。部署負載均衡器在棧中,單擊添加服務旁邊的下拉菜單,然后選擇添加負載均衡器。如果你收到狀態或的錯誤報告,那么需要檢查負載均衡器配置,確認設置無誤。 介紹 GitLab核心是集成管理Git存儲庫的工具。比如你希望創建一個提供服務的平臺,那么GitLab將提供強大的身份驗證和授權機制、工作組、問題跟蹤...

    macg0406 評論0 收藏0
  • Rancher upgrade webhook之CI/CD

    摘要:應用鏡像示例應用基于官方鏡像,修改了頁面信息應用鏡像推送應用鏡像到指定的遠程鏡像倉庫創建通過創建,,命令行如下驗證服務打開瀏覽器,訪問服務,確認應用的內容。驗證更新打開瀏覽器,訪問服務,驗證服務升級內容是否正常。 概述 結合大家CI/CD的應用場景,本篇Blog旨在介紹如何通過Rancher的webhook微服務來實現CI/CD的聯動。 流程介紹 本次實踐的主要流程如下: CI/CD...

    sf_wangchong 評論0 收藏0
  • 超長干貨:基于Docker的DevOps CI/CD實踐——來自iHealth的分享

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

    Dongjie_Liu 評論0 收藏0
  • 如何使用DockerDocker-ComposeRancher搭建部署Pipeline(四)

    摘要:注冊器監視每個守護進程的事件,并在生命周期事件期間自動更新。條件可以包括親和規則否定至軟強制意味著盡可能地避免。當使用通用標記如或部署服務時,可能會出現意外的后果。月日,北京海航萬豪酒店,容器技術大會即將舉行。 在這篇文章中,我們將討論如何用Rancher實現consul的服務發現。 如果你還沒有準備好,推薦你閱讀本系列中先前的文章:第一篇:CI /CD和Docker入門第二篇:使部署...

    13651657101 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<