自動持續集成和持續交付使用磚磚實驗室CI / CD模板
2020年6月5日 在工程的博客< / >
內容
- 概述< / >
- 我們為什麼需要另一個部署框架?< / >
- 通過可重用模板簡化CI / CD磚< / >
- 開發生命周期使用磚部署< / >
- 如何創建和部署一個新的數據項目在10分鍾內與磚實驗室CI / CD的模板嗎?< / >
概述
磚實驗室的持續集成和持續部署(CI / CD)模板是一個開源的工具,方便了軟件開發團隊使用現有的CI工具對磚的工作。此外,它包括管道模板與磚的最佳實踐的運行在Azure和AWS開發者可以專注於重要的寫代碼而不是建立完整測試、集成和部署係統從零開始。
CI / CD模板3步驟:
pip安裝cookiecutter
cookiecutter https://github.com/databrickslabs/cicd-templates.git
- 回答互動問題等終端雲你想使用和你有一個完整的管道工作。
pip安裝databricks_cli & &磚配置——令牌
- 開始管道磚通過運行
/ run_pipeline。py管道
在項目中主要的目錄
- 磚牌和工作區URL添加到github秘密和提交你的管道github回購。
你現在的磚實驗室CI / CD的管道將對磚自動運行測試當你做出新的承諾回購。當你準備部署代碼,做一個github釋放和模板將自動打包和部署您的管道磚的工作。
就是這樣!你現在有一個可伸縮的管道工作,開發團隊可以使用和發展的。此外,您可以修改模板更特定於您的團隊或用例,以確保未來的項目可以輕鬆設置。
對於這篇文章的其餘部分,我們將深入介紹關於為什麼我們決定創建磚實驗室CI / CD的模板,為未來的項目計劃是什麼,以及如何做出貢獻。
我們為什麼需要另一個部署框架?
隨著項目數據磚不斷變大,磚的用戶可能會發現自己在努力跟上眾多筆記本包含ETL、數據科學實驗,儀表板等。雖然有各種短期解決方法如使用%運行命令來調用其他筆記本在你當前的筆記本,是有用的遵循傳統軟件工程最佳實踐的分離從管道調用,代碼可重用代碼。此外,管道周圍建築測試驗證管道也正在生產級開發過程是另一個重要的一步。
最後,能夠自動運行工作在新的代碼更改,而無需手動觸發工作或手動安裝庫集群是重要的實現可伸縮性和整個管道的穩定。總之,規模和穩定生產管道,我們想擺脫手動運行代碼在筆記本裏,並朝著自動包裝,測試和部署我們的代碼使用傳統軟件工程工具,如ide和連續integrationI工具。
事實上,越來越多的數據團隊使用磚作為他們的工作負載運行時傾向於發展管道使用傳統軟件工程實踐:使用ide, GIT和傳統CI / CD管道。這些團隊通常想掩蓋自己的數據處理邏輯單元測試和執行集成測試每個變更後的版本控製係統。
釋放過程也是管理使用版本控製係統:公關是並入發布分支後,可以執行集成測試和積極成果的情況下部署管道也可以更新。帶來一個新版本的管道生產工作區也是一個複雜的過程,因為他們可以有不同的依賴關係,如配置工件、python和/或maven庫和其他依賴項。在大多數情況下,不同的管道可以依靠不同版本的相同的工件(s)。
通過可重用模板簡化CI / CD磚
許多組織已經投入很多資源建立自己的CI / CD管道不同的項目。基本上所有的管道有很多共同點:它們構建、部署和測試一些構件。長時間過去,開發商也投資在發展中不同的腳本構建,測試和部署的應用程序之前CI工具也淘汰了大部分的任務:約定引入CI工具可以為開發人員提供了框架,可以實現大部分的任務在一個抽象的方式,這樣就可以應用於任何項目,遵循這些約定。例如Maven引入了Java開發這樣的約定,使自動化的構建過程成為可能,實現巨大的ant腳本。
磚實驗室CI / CD的模板可以方便地使用現有的CI / CD工具,如詹金斯,磚;模板包含管道預製代碼創建根據磚的最佳實踐。此外,模板允許團隊打包他們的CI / CD管道到可重用的代碼,以緩解未來的項目的創建和部署。磚實驗室CI / CD模板引入了類似的約定的工程和數據科學項目提供數據從業者使用磚和抽象工具實施CI / CD管道的數據應用。
讓我們去深入我們的約定。大部分的數據處理邏輯包括數據轉換、生成邏輯功能,模型訓練等應製定在python包。這種邏輯可以利用的生產管道,可以安排工作。上述邏輯也可以測試使用本地測試單個轉換功能的單元測試和集成測試。集成測試是運行在磚的工作空間,可以測試數據管道作為一個整體。
開發生命周期使用磚部署
數據工程師和科學家可以依靠磚實驗室CI / CD模板測試和部署他們在ide中開發的代碼在磚。磚實驗室CI / CD模板為用戶提供可重用的數據項目模板,可用於啟動一個新的數據的開發用例。該項目將有以下結構:
數據攝入、驗證和轉換邏輯,結合工程特點和機器學習模型,可以開發在python包。這種邏輯可以利用生產管道和被測試使用開發人員和集成測試。磚實驗室CI / CD的模板可以部署生產管道磚工作,包括所有依賴項,自動。這些管道必須放置在“管道”目錄,可以有自己的依賴關係,包括不同的庫和配置工件。開發人員可以利用當地的Apache火花或磚模式連接到測試中的代碼在開發IDE安裝在筆記本電腦上。以防他們想要運行這些管道在磚上,他們可以使用CLI磚實驗室CI / CD的模板。開發人員還可以使用CLI啟動集成測試磚項目的當前狀態。
之後,用戶可以更改推到GitHub,他們將自動測試磚使用GitHub動作配置。後推,GitHub行動啟動一個虛擬機,檢查項目的代碼和運行本地pytest測試在這個VM。如果這些測試是成功的,它將構建python輪並將其部署在所有其他依賴磚和磚上運行開發人員測試。
在開發周期的結束,整個項目可以部署到生產通過創建一個GitHub釋放,這將啟動集成測試在磚磚生產和部署管道的工作。在這種情況下,CI / CD管道將看起來類似於上一個,但不是開發人員測試,集成測試將運行在磚,如果他們成功了,磚生產工作規範將被更新。
如何創建和部署一個新的數據項目在10分鍾內與磚實驗室CI / CD的模板嗎?
創建一個新項目使用磚實驗室CI / CD模板項目模板
- 安裝Cookiecutter python包:
pip安裝cookiecutter
- 創建您的項目使用我們的cookiecutter模板:
cookiecutter https://github.com/databrickslabs/cicd-templates.git
- 回答問題…
在那之後,將創建新的項目給你。它將有以下結構:
。├──cicd_demo│├──__init__ . py│├──數據││├──__init__ . py││└──make_dataset.py│├──特性││├──__init__ . py││└──build_features.py│├──模型││├──__init__ . py││├──predict_model.py││└──train_model.py│└──可視化│├──__init__ . py│└──visualize.py├──create_cluster.py├──部署│└──databrickslabs_mlflowdepl -0.2。0-py3-none -任何.whl├──deployment.yaml├──dev-tests│├──pipeline1││├──job_spec_aws.json││├──job_spec_azure.json││└──pipeline_runner.py│└──pipeline2│├──job_spec_aws.json│├──job_spec_azure.json│└──pipeline_runner.py├──文檔│├──Makefile│ ├ ── commands.rst│├──conf.py│├──getting-started.rst│├──index.rst│└──make.bat├──集成測試│├──pipeline1││├──job_spec_aws.json││├──job_spec_azure.json││└──pipeline_runner.py│└──pipeline2│├──job_spec_aws.json│├──job_spec_azure.json│└──pipeline_runner.py├──筆記本├──管道│├──pipeline1││├──job_spec_aws.json││├──job_spec_azure.json││└──pipeline_runner.py│└──pipeline2│├──job_spec_aws.json│├──job_spec_azure.json│└──pipeline_runner.py├──讓├──run_pipeline.py├──runtime_requirements.txt├──setup . py└──測試└──test_smth.py< / >
我們創建的項目的名稱是“cicd_demo”,所以python包名稱也是“cicd_demo”,所以我們的轉換邏輯將開發在“cicd_demo”目錄中。它可以使用的管道將被放置在“管道”目錄。在“管道”目錄中我們可以開發一些管道,他們每個人在其自己的目錄中。
每個管道必須有一個入口點的python腳本,它必須被命名為“pipeline_runner.py”。在這個項目中,我們可以看到兩個示例創建管道。每個這些管道的python腳本和工作規範為每個支持的雲json文件。這些文件可用於定義集群規範(例如,數量的節點,實例類型,等等),作業調度設置,等等。
“Dev-tests”和“集成測試的目錄是用於定義集成測試,測試管道磚。他們應該利用python包的邏輯發展和評估結果的轉換。
讓我們將我們的項目部署到目標數據磚工作區
磚和GitHub行動部署緊密集成。我們將需要創建一個新的GitHub庫,我們可以推動我們的代碼,我們可以使用GitHub行為自動測試和部署我們的管道。為了整合GitHub庫與磚的工作空間,工作空間的URL和個人身份驗證令牌(PAT)必須配置為GitHub的秘密。工作區必須配置URL DATABRICKS_TOKEN DATABRICKS_HOST秘密,令牌。
現在我們可以初始化一個新的git存儲庫在項目目錄。之後,我們可以將所有文件添加到git,推動他們遠程GitHub庫。我們已經配置了令牌之後,繼續我們的第一推動GitHub行動將自動運行dev-test目標磚工作區和我們第一次提交的將綠色如果測試成功。
可以啟動運行的生產管道或個人測試通過運行run_pipeline磚從當地的環境。py腳本:
。/run_pipeline。py管道——pipeline-name test_pipeline
這個命令將從管道運行test_pipeline磚上的文件夾。
測試自動化使用磚部署
新創建的項目預配置有兩個標準CI / CD管道:其中一個是為每個執行推和跑dev-tests磚工作區。
另一個是為創建的每個GitHub發布和運行集成測試運行在磚工作區。在集成測試的積極結果的情況下,磚的生產管道作為工作部署的工作空間。
部署生產管道使用磚部署
為了部署管道生產工作區,GitHub釋放可以創建。它會自動開始集成測試,如果他們是積極的,磚的生產管道作為工作部署的工作空間。在第一次運行期間,將磚的工作區中創建工作。在隨後的版本中,現有的工作將被更新的定義。
依賴和配置管理
磚部署支持依賴管理兩個層次:
- 項目級別:
- 項目級別的python包依賴性,需要在生產過程中運行時,可以放在runtime_requiremnets.txt
- 還可以使用項目級別JAR或Python Whl依賴性。可以把它們放在依賴/ jar和依賴/輪子目錄。
- 管道的依賴關係:
- 管道水平python / maven /工作規範中規定的其他依賴項可以直接json庫部分
- 罐子和輪子可以放在依賴/ jar和依賴/輪子目錄分別在管道文件夾
配置文件可以放置在管道目錄中。他們將被記錄到MLflow與python腳本。在磚的工作腳本執行期間將得到管道文件夾的路徑作為第一個參數。這個參數可以用來打開任何文件出現在管道目錄。
讓我們來討論我們如何可以使用磚部署管理依賴性使用下麵的例子:
。├──依賴性│├──壇子││└──direct_dep.jar│└──輪子│└──someotherwheel -0.1。0-py3-none -任何.whl├──job_spec_aws.json├──job_spec_azure.json├──pipeline_runner.py└──train_config.yaml
這個管道有兩個依賴管道水平:一個jar文件和一個車輪。Train_config。yaml文件包含配置參數,管道可以閱讀使用下麵的代碼:
defread_config(名字,根):試一試:文件名= root.replace (“dbfs:”,' / dbfs ')+' / '+名字與開放(文件名)作為conf_file:conf = yaml。負載(conf_file裝載機= yaml.FullLoader)返回相依除了FileNotFoundError作為艾凡:提高FileNotFoundError (f”{e}。請包括一個配置文件!”)參看= read_config (“train_config.yaml”,sys.argv [1])
前景和下一步
有不同的方向進一步發展的磚部署。我們想把擴展組CI / CD工具我們提供的模板。現在隻是GitHub的行動,但是我們可以添加一個模板,集成了CircleCI或Azure DevOps。
另一個方向可以支持管道在Scala開發的發展。
如何貢獻?
磚實驗室CI / CD的模板是一個開源工具,我們愉快地歡迎貢獻。歡迎您提交公關!