摘要:自動部署到遠程服務器現在已經可以自動構建了,那么接下來的一步就是部署到遠程服務器。最后,貼出我自己的,里面有關涉及個人隱私的部分我會注釋并說明請替換成自己的登錄和登錄用戶請替換成自己的服務器本文參考鏈接使用進行持續集成自動化部署博客
Travis CI 是在軟件開發領域中的一個在線的,分布式的持續集成服務,用來構建及測試在GitHub托管的代碼。
對于 GitHub 的集成 Travis 做得很好,與 Jenkis 不同,Travis 不需要自己在服務器部署服務,并且是高度集成 GitHub 的,所以對于開源項目還是非常友好的。
注冊配置 Travis注冊成功,登錄,然后添加自己的 GitHub 上的 repo
選擇其中一個或多個你需要集成的項目,開啟 build,也就是點擊叉叉變成勾勾的過程。
假設現在已經對某個項目開啟了 Travis,那么先去看看 Settings 里默認開啟的那幾項,根據自己實際需求進行設置,沒什么特殊需求默認的設置就可以了。
接下來的步驟很清楚,官方也有配圖說明:
添加 .travis.yml說白了接下來的事情都是如何去寫這個配置文件,因為 Travis 全是根據這個配置文件去執行相應動作的。
根據你的語言不同,配置也會有較大差異,因為我的博客使用 PHP 的流行框架 Laravel 寫的,所以這里也拿它作為例子,官方給出的最精簡的 PHP 配置文件是:
language: php php: - 7.1.9 - nightly觸發構建
接下來如上面所說的第三步,將這個 .travis.yml 文件提交到 GitHub,那么 Travis 就會自動觸發構建任務。
我就知道第一次不會這么簡單的,失敗了。。。
報錯原因是執行 phpunit 時提示:
PHP Warning: require(/home/travis/build/stephencode/super-admin/bootstrap/../vendor/autoload.php): failed to open stream: No such file or directory in /home/travis/build/stephencode/super-admin/bootstrap/autoload.php on line 17
一看是自己項目的 composer 依賴包的 autoload.php 文件沒找到,那應該是沒有執行 composer up 之類的操作,結合網上找的資料,比較好的解決方式是在 install 層添加一行:
install: - composer install --prefer-dist --optimize-autoloader --quiet
這樣就不會報上面這個錯了,然后會報接下來的一個錯。。。
1) TestsFeatureRouteTest::testBasicTest RuntimeException: No application encryption key has been specified.
其實這個是我在 Laravel 里面的 phpunit.xml 沒有配置好的緣故。將
在經過五六次 build failed 之后,總算天不負我了。
自動部署到遠程服務器現在已經可以自動構建了,那么接下來的一步就是部署到遠程服務器。Travis 提供 after_success 來實現這步驟。
等等,我們要部署到遠程服務器,那么勢必需要讓 Travis 登錄到遠程服務,那么登錄密碼怎么處理才能保證安全?這是首先要解決的問題,明文肯定是不行的。
加密登錄密碼那看來先得解決這個問題,Travis Docs 里也幫我考慮到了這個避不開的問題的解決方案(Encrypting Files)
我們一起來實踐一下:
首先通過 Ruby 的 gem 安裝 travis
gem install travis
哎,重試了幾次發現敲完這段 shell 如同石沉大海一般,屁都不放一個。。。就算開了代理還是紋絲不動,沒辦法只能換鏡像了。
$ gem sources -l *** CURRENT SOURCES *** https://rubygems.org/
查看一下當前的鏡像,這貨(rubygems)國內出奇的難以訪問,網上一搜國內的鏡像源,Ruby China 的應該很顯眼吧~
$ gem update --system $ gem sources --add https://gems.ruby-china.org/
然后再查看一下 gem 鏡像,確保只有 Ruby China 的 gem 源。
好了,現在可以愉快的安裝 travis 了
$ sudo gem install travis
接下來讓我們先在命令行中登錄 Travis
$ travis login We need your GitHub login to identify you. This information will not be sent to Travis CI, only to api.github.com. The password will not be displayed. Try running with --github-token or --auto if you don"t want to enter your password anyway. Username: xxx@xxx.xxx Password for xxx@xxx.xxx: *** Successfully logged in as demo!
會要求你輸入 GitHub 的賬號密碼,這個是走 GitHub 的服務,所以不用擔心密碼泄露。
將目錄切換到項目根目錄下,也就是 .travis.yml 目錄下。因為我們需要讓 travis 遠程登錄自己的服務器,所以需要將本地保存著的 SSH 私鑰進行加密處理(默認你也是通過 SSH 免密登錄的模式哦,不清楚可以參考我這一篇 《SSH 免密登錄》)。
$ travis encrypt-file ~/.ssh/id_rsa --add Detected repository as xxx/xxx, is this correct? |yes| yes encrypting ~/.ssh/id_rsa for xxx/xxx storing result as id_rsa.enc storing secure env variables for decryption Make sure to add id_rsa.enc to the git repository. Make sure not to add ~/.ssh/id_rsa to the git repository. Commit all changes to your .travis.yml.
這個時候去看一下當前目錄下的 .travis.yml,會多出幾行
before_install: - openssl aes-256-cbc -K $encrypted_d89376f3278d_key -iv $encrypted_d89376f3278d_iv -in id_rsa.enc -out ~/.ssh/id_rsa -d
為保證權限正常,多加一行設置權限的 shell
before_install: - openssl aes-256-cbc -K $encrypted_d89376f3278d_key -iv $encrypted_d89376f3278d_iv -in id_rsa.enc -out ~/.ssh/id_rsa -d - chmod 600 ~/.ssh/id_rsa
還有一點可能會用上,因為 travis 第一次登錄遠程服務器會出現 SSH 主機驗證,這邊會有一個主機信任問題。官方給出的方案是添加 addons 配置:
addons: ssh_known_hosts: your-ip
到這里,travis 就能夠免密登錄自己的遠程服務器啦~
自動部署既然已經可以免密登錄服務器了,那么寫一個部署腳本,在登錄時執行該腳本就可以了,一切就是這么順其自然就好~
寫部署腳本我寫 Shell 腳本的水平很有限,這邊也就給出一個最精簡的 Demo 可以參考一下:
#!/bin/bash cd /path/to/your-project git pull origin master echo "travis build done!"執行部署腳本
在 .travis.yml 配置文件中寫下這么兩行:
after_success: - ssh your-user@your-ip "./your-shell-script"
記得將其中的 your-user、your-ip、your-shell-script 都替換成自己的哦!
高大上標志辛苦奮斗了一天,總是希望別人看到自己的勞動成果的,除了寫這篇文章意外還能做點什么呢?那自然是給自己的這個項目在 GitHub 上的 README.md 中顯示一個高大上的 build:passing 標志,就像這樣:
總結這次過程中基本都是從不會到會的一個學習過程,從中了解到不少新東西,也發現一些自己的短板,比如寫 shell 腳本。。。
最后,貼出我自己的 .travis.yml,里面有關涉及個人隱私的部分我會注釋并說明:
language: php php: - 7.1.9 - nightly env: - APP_DEBUG=false before_install: - openssl aes-256-cbc -K $encrypted_d89376f3278d_key -iv $encrypted_d89376f3278d_iv -in id_rsa.enc -out ~/.ssh/id_rsa -d - chmod 600 ~/.ssh/id_rsa install: - composer install --prefer-dist --optimize-autoloader --quiet notifications: email: recipients: - stephenfxl@gmail.com on_success: always on_failure: always script: - phpunit -c phpunit.xml --coverage-text after_success: - ssh xxx@xxxx.xxxx.xxxx.xxxx "./travis_build" # 請替換成自己的登錄IP和登錄用戶 addons: ssh_known_hosts: xxxx.xxxx.xxxx.xxxx # 請替換成自己的服務器IP
本文參考鏈接:
使用Travis進行持續集成
Jekyll + Travis CI 自動化部署博客
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/25857.html
摘要:使用可以解決自動構建和自動部署的問題這樣能讓我們更加專注書寫。當倉庫激活服務,當你的博客有新的修改提交到的時候,會通知。在里為對應的倉庫添加,用于后續使用這樣可以將通過生成的靜態博客源文件推送到分支。 showImg(https://segmentfault.com/img/bVMhse?w=800&h=300); 簡介 紙小墨(InkPaper)是一個GO語言編寫的開源靜態博客構建工...
摘要:是目前新興的開源持續集成構建項目,采用格式,簡潔清新獨樹一幟。目前大多數的項目都已經移入到的構建隊列中。測試提交代碼到中查看部署情況至此,整個部署完成,趕快自己嘗試一下吧 Travis CI是目前新興的開源持續集成構建項目,采用yaml格式,簡潔清新獨樹一幟。目前大多數的github項目都已經移入到Travis CI的構建隊列中。Travis-CI會同步你在GitHub上托管的項目,...
摘要:配置觸發方式一般會得到這么個語雀配置配置一個倉庫的可以選擇所有更新觸發或者主動觸發,主動觸發的意思即發布需要勾選一個選項才會觸發。 Hexo + Github + 語雀 + yuque-hexo +travis-ci+severless 打造全自動持續集成個人博客,云端寫作,自動部署,完美體驗~ 一、Hexo+Github 的痛點 1.為啥要用hexo+github? 作為一個程序猿,...
摘要:配置觸發方式一般會得到這么個語雀配置配置一個倉庫的可以選擇所有更新觸發或者主動觸發,主動觸發的意思即發布需要勾選一個選項才會觸發。 Hexo + Github + 語雀 + yuque-hexo +travis-ci+severless 打造全自動持續集成個人博客,云端寫作,自動部署,完美體驗~ 一、Hexo+Github 的痛點 1.為啥要用hexo+github? 作為一個程序猿,...
摘要:一切看似妥當,但是頻繁的調整以及部署自然成了頭疼的問題。叫作部署的大問題由于我比較菜,所以沒有寫測試模塊。為什么因為絕大多數都是黨用來部署的啊。。。經過思考,原來在這里我們需要將部署工序做一個調整,同時增加步。。。 前言 在自己的vps上做博客系統已經有一段時間了,期間也是磕磕碰碰遇到不少問題,如今也算是有個基礎版本能用。可是vps上只放一個博客有點浪費了,而且博客系統也不光是用來寫文...
閱讀 1030·2021-09-22 15:26
閱讀 2607·2021-09-09 11:52
閱讀 1890·2021-09-02 09:52
閱讀 2241·2021-08-12 13:28
閱讀 1180·2019-08-30 15:53
閱讀 505·2019-08-29 13:47
閱讀 3379·2019-08-29 11:00
閱讀 3095·2019-08-29 10:58