阿茲卡班和多克

在 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 然後繼續反覆運算它。 有一天,它可能會運行我們所有的自動化管道。 如果你喜歡快速的運行, 討厭堵塞開發時間的過程, 那麼請 加入我們!

About ShareThis

ShareThis has unlocked the power of global digital behavior by synthesizing social share, interest, and intent data since 2007. Powered by consumer behavior on over three million global domains, ShareThis observes real-time actions from real people on real digital destinations.

Subscribe to our Newsletter

Get the latest news, tips, and updates

Subscribe

Related Content