阿茲卡班和多克

在 ShareThis , 我們不喜歡為自己創造額外的工作。 即時管理 TB 和 PB 的數據已經夠難了。 因此,我們積極尋找更快、更高效地工作的方法。 這意味著評估不同的技術和盡可能自動化。 它還涉及快速原型設計,以及盡可能少的代碼啟動和運行。

最近,我想測試 阿茲卡班 快速輕鬆地安排作業流。 但是,我不想在測試時花費大量時間使系統上下,我想跟蹤所有更改,以便我可以隨心所欲地構建和銷毀系統。 這聽起來像一個偉大的時間拉出我 多克 帽子和使用 碼頭組成. 它也允許我刷在巴什捲曲。

第一步是獲取一個集設置單個節點應用程式的 Dockerfile。 這將允許我先開始使用系統:



from java:7


COPY azkaban-solo-server-2.5.0.tar.gz /azkaban-solo-server-2.5.0.tar.gz
RUN tar -xf /azkaban-solo-server-2.5.0.tar.gz
RUN apt-get update
RUN apt-get install zip
ADD flows /azkaban-solo-2.5.0/flows
ADD run.sh /
ADD jq /usr/bin/jq


CMD /azkaban-solo-2.5.0/bin/azkaban-solo-start.sh

然後,Docker-compose 可以用來把整件事都提起來。 因此,我寫了一個dc-solo.yml檔:



azkaban:
  build: solo/.
  ports:
        - 8081:8081

現在我可以:

$] 碼頭組合 -f dc-solo.yml 生成
$] 碼頭組合 -f dc-solo.yml 向上

阿茲卡班在跑! 我玩了 UI,並意識到如果這要工作,我們需要將流保存在 Github 中並自動載入。 這把我引導到這個過程的第二部分,即如何從Github流向阿茲卡班。 為此,我開始使用 curl 侵入他們的 API(我永遠不會建議完成的專案,但對於快速反覆運算,這行得通)。 我還知道一個不錯的json工具: "jq".

首先,讓我們編寫一個函數,將會話令牌保存到名為 FCRED 的變數:

#

getSession simply creates a session with default credentials.

#

getSession () { CRED=curl -k -X POST --data "action=login&username=azkaban&password=azkaban" $PROD 而 [ $? -ne 0 ] 做 睡眠 1 瑞克*curl -k -X POST --data "action=login&username=azkaban&password=azkaban" $PROD 做 FCRED*echo $CRED | jq '."session.id"' | sed s/\"//g }

然後,讓我們在阿茲卡班創建一個專案:

#

createProject creates a project in Azkaban

#

$1 The name of the project.

$2 The description of the project.

#

createProject () { RESP=curl -k -X POST --data "session.id=$FCRED&name=${1}&description=$2" $PROD/manager?action=create }

您可以將隨流一起上傳 zip 檔案到專案:

uploadZip () { RESP=curl -k -H "Content-Type: multipart/mixed" -X POST --form "session.id=$1" --form "ajax=upload" --form "file=@$2;type=application/zip" --form "project=$3" $PROD/manager 專案ID*echo $RESP | jq '.projectId' | sed s/\"//g }

甚至安排它:

schedule () { RESP=curl -k "localhost:8081/schedule?ajax=scheduleFlow&session.id=$1&projectName=$2&flow=$3&projectId=$4&scheduleTime=$5&scheduleDate=$6&is_recurring=on&period=$7" 回聲"計劃:$? 回聲$RESP 回聲$RESP |jq '' }

我最終只是通過目錄樹反覆運算,壓縮具有 Azkaban 作業檔的目錄並上傳它們。

#

uploadFlow will zip up the contents of each project directory and upload the flow.

#

$1 The name of the project which corresponds to a directory.

#

uploadFlow () { proj=$1 rm $proj.zip zip $proj.zip $proj/* uploadZip $FCRED $proj.zip $proj }

#

Main Script

#

getSession for dir in ls -d */; do proj=${dir%%/} desc="cat ${dir}description.txt" 建立「$desc」$proj專案 上傳流$proj 完成;

這不是結束。 這些阿茲卡班流在 MVP 方式上證明瞭自己的有用性,我已經開始擴展 Docker-compose 配方,以便我們得到支援 亞馬遜的RDS.您是否看到我如何通過不實現資料庫來節省自己的工作? 我愛雲!! 下面是我的多節點 Docker 組合:(我的工作 dc-full.yml 用於在本地環境中暫存。 對於使用 RDS,我將 Docker 映射替換為實際網路映射。


mysql:
  image: mysql
  environment:
        - MYSQLROOTPASSWORD=root
        - MYSQLDATABASE=azkaban
        - MYSQLUSER=azkaban
        - MYSQL_PASSWORD=azkaban
  volumes:
        - /mnt/mysql/azkaban:/var/lib/mysql
executor:
  build: exec/.
  links:
        - mysql
  ports:
        - 12321
web:
  build: web/.
  links:
        - mysql
        - executor
  ports:
        - 8081:8081

現在就是這樣。 我們將看看這是否證明 ShareThis 然後繼續反覆運算它。 有一天,它可能會運行我們所有的自動化管道。 如果你喜歡快速的運行, 討厭堵塞開發時間的過程, 那麼請 加入我們!

關於 ShareThis

ShareThis 自 2007 年以來,通過綜合社會共用、興趣和意圖數據,解鎖了全球數位行為的力量。受全球超過300萬個功能變數名稱的消費者行為推動, ShareThis 觀察真實人員在真實數位目的地上的即時操作。

訂閱我們的時事通訊

獲取最新消息、提示和更新

訂閱

相關內容