2015-09-11 53 views
14

我想自動將我們的網站部署到AWS S3。我已經編寫了一個節點腳本來自動構建和上傳該網站,但是我希望腳本自動運行,只要我們的回購庫的master分支在github上更新即可。在github推送上將靜態站點部署到s3的最佳策略?

我看了一下AWS CodeDeploy,但看起來像是專門部署到EC2。我也看過AWS Lambda,但似乎沒有一種明確的方式來使用git來購買回購副本,因此我可以運行該腳本。

我可以使用的任何服務(最好綁定到AWS)?

回答

5

而不是直接使用的AWS服務(如你所說,他們幾乎都希望一個更復雜的設置,部署到EC2等),你可能會使用CI提供商,如ShippableCodeshipWercker會更好。

這些都可以從git更新,運行構建命令,將實用程序安裝到其CI映像/容器中,並將文件複製到S3。

很可能有一些啓動它已經建立了一個精確的工具,你的目的,但他們並沒有出現在我的雷達尚未:-)

7

我知道這不是git的部署....而是的建立一個CI盒子,我只用了s3cmd。

http://s3tools.org/s3cmd

執行此命令同步與S3我的build目錄。

s3cmd sync -r ~/code/mysite/build s3://www.mysite.com --delete-removed 

我在Linux上使用它。不確定他們的OSX和Windows故事是什麼。

如果你真的在使用git推送解決方案後,可以設置一個定時作業,將git repo拖到一個文件夾中,然後對其執行此操作。我在其他地方在廉價的Linux VM上執行此操作。除非你要去完整的CI,否則可能沒有多少意義。

+0

這有可能會加入到一個git post-commit鉤子,它會做。 – Zlatko

+0

是的,好主意。我剛想到,最近宣佈Windows將能夠運行Linux二進制文件,s3cmd可能也適用於Windows!非常酷。 https://blogs.windows.com/buildingapps/2016/03/30/run-bash-on-ubuntu-on-windows/ –

7

我前段時間有同樣的目標,現在已經發布了一個小工具,至少可以解決這個問題。它使用AWS Lambda,並在push之後將存儲庫的特定分支部署到S3。您可以充分利用GitHub部署密鑰,該密鑰具有較少的權限作爲個人訪問令牌,並且可以在每個存儲庫中進行配置。

請看看github-bucket,它可能也會幫助你。

github-s3-deploy-architecture

0

也許制服爲您簡單的用例,但你可以創建一個非常簡單的CodePipeline你的github倉庫推到S3。

+0

如何在CodePipeline中選擇S3作爲輸出? – LC1983

0

我也推薦使用codeship,簡單易用,但是您需要創建具有適當權限(這是策略)的IAM用戶到S3存儲桶。

codeship的基本計劃是免費的。

那麼可能有問題到目前爲止我可以看到codeship不會刪除文件,因爲你刪除github中的文件,畢竟,s3不是github repo,但無論如何,很多github更新的putObject操作都很好用對我來說足夠了。

+0

沒有證明這個工作,但讀到:如果您使用_aws s3 sync_ _--刪除(布爾)在目標中存在但不在源*中的文件在同步過程中被刪除_ From:http:// docs .aws.amazon.com/cli/latest/reference/s3/sync.html – Nigel

3

如果您使用的是TravisCI,deployment非常簡單。你將需要添加到您的.travis.yml唯一的部分是:

deploy:       
    provider: s3       
    access_key_id: "YOUR AWS ACCESS KEY" 
    secret_access_key: 
    secure: "w/DlbHt1+IAMENCRYPTED" 
    bucket: "YOUR BUCKET" 

My blog post解釋了AWS側的所有細節(用戶設置,IAM和S3存儲配置)以及GitHub的和travisCI側。

2

你可以用一個非常簡單的2段CodePipeline來設置它。基本上,您只需填寫AWS控制檯中的不同部分即可。不需要單獨的CI工具以及增加的複雜性。

在管道的第一步,從Github拉出並存儲在S3中。您可以通過AWS控制檯輕鬆進行設置。

在接下來的CodeDeploy步驟中,您可以使用AWS CLI(預裝CodeDeploy)做

cd /path/to/public/directory && aws s3 sync --acl public-read --delete . s3://your.bucket.name 

你必須設置AWS_ACCESS_KEY_ID環境變量和AWS_SECRET_ACCESS_KEY讓AWS CLI可以在部署步驟中運行,也可以在AWS環境變量的高級部分中的CodeDeploy AWS控制檯中完成。一旦設置了環境變量,並且該AWS用戶擁有正確的權限,則可以在CodeDeploy中運行所需的任何aws-cli命令。

完成此操作後,當您檢入Github時,CodePipeline將啓動,幾分鐘後您的文件將在S3上。

+0

你如何設置從Github到S3的拉?那是與Lambda?或者CodePipeline? – LC1983

+0

在您的CodePipeline嚮導中,它向您詢問源代碼。 Github是支持的來源之一,因此選擇Github作爲您的來源。您需要設置Github身份驗證,以便您的CodePipeline有權讀取您的Github帳戶(如果它是私人回購),但這些都是通過控制檯完成的。第一次做到這一點,我沒有任何問題通過控制檯完成 - 步驟非常清晰。 –

+0

我可以得到代碼,但不能將S3設置爲n輸出。 – LC1983

0

我過去曾使用Deploy Bot,對此我一直很滿意。

它可以通過Git推送到S3甚至FTP,也可以運行您的構建腳本,甚至可以將通知推送給Slack。

https://deploybot.com/