目標(biāo)
實現(xiàn) git push 后族壳,自動將代碼發(fā)布到 google 云服務(wù)器 compute engine徒溪。其它服務(wù)器同理忿偷。
準(zhǔn)備1-免密登錄操作步驟
原理
要想通過 travis 在執(zhí)行服務(wù)器得腳本首先得登陸到我們的服務(wù)器,但是在 travis 不像交互式終端臊泌。一般利用用戶名和密碼登陸是需要輸入用戶名鲤桥,密碼的,但是 travis 里面沒有提供與用戶交互的界面缺虐,當(dāng)然這也與自動化不符芜壁,所以我們只有利用其他方式登陸–SSH 免密登陸。
SSH 的登陸原理大家可以看這個:SSH 公鑰登陸原理高氮。大概過程就是慧妄,在客戶端生成一個公鑰/私鑰對,將公鑰內(nèi)容保存到服務(wù)器 ~/.ssh/authrized_keys 中剪芍,然后客戶端發(fā)起連接請求時塞淹,服務(wù)器發(fā)送一個字符串給客戶端,客戶端用本地的私鑰對字符串進(jìn)行加密然后發(fā)送給服務(wù)器罪裹,服務(wù)器將收到的加密字符串用公鑰解密饱普,如果能解密成功就登陸成功运挫。
這里的公鑰/私鑰對就是登陸的關(guān)鍵,我們不能直接操作 travis 服務(wù)器套耕,在上面生成公鑰/私鑰對谁帕,所以按照上面正常的流程就走不通,這時候就需要讓 travis 偽裝成一個受信的客戶端去連接冯袍。也就是我們需要有一對公鑰/私鑰對匈挖,公鑰已經(jīng)保存在我們的 Linux 服務(wù)器中,私鑰保存在某個 travis 能訪問到的地方康愤,在必要的時候用這個私鑰去連接服務(wù)器儡循,這里我們可以把私鑰放在 git 代碼倉庫中,但是直接把私鑰放代碼中不安全征冷,所以travis 提供了對私鑰進(jìn)行加密的功能择膝,我們可以把私鑰加密之后放在代碼倉庫,在登陸的時候 travis 解密該私鑰用于連接检激。
了解了大概原理肴捉,接下來就是具體操作。
1呵扛、在 root 用戶下創(chuàng)建新用戶
#新建用戶
useradd user1
#修改密碼(應(yīng)該不是必要每庆,但是萬一以后需要用密碼登陸呢),按照提示設(shè)置密碼。
passwd user1
#為用戶添加添加權(quán)限
vim /etc/sudoers
找到#Allow root to run any commands anywhere這一段注釋今穿,在下面新增一行:
user1 ALL=(ALL) ALL
2缤灵、生成公鑰/私鑰對
#切換至用戶user1,
su user1
cd ~
#一致默認(rèn)即可
ssh-keygen -t rsa
3蓝晒、將生成的公鑰添加為受信列表
cd .ssh/
cat id_rsa.pub >> authorized_keys
chmod 700 ~/.ssh/
chmod 600 ~/.ssh/*
4腮出、測試免密
#在.ssh目錄下新增配置文件 config
vim config
config 內(nèi)容如下
Host test
HostName [服務(wù)器ip]
User user1
IdentitiesOnly yes
IdentityFile ~/.ssh/id_rsa
5、坑點
1)添加非 root 用戶執(zhí)行命令權(quán)限芝薇,否則報無權(quán)限
vim /etc/sudoers
找到#Allow root to run any commands anywhere這一段注釋胚嘲,在下面新增一行:
```shell
user1 ALL=(ALL) ALL
準(zhǔn)備2-安裝 travis 客戶端
1、安裝 rvm
具體參考:https://rvm.io/rvm/security
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
echo 409B6B1796C275462A1703113804BB82D39DC0E3:6: | gpg2 --import-ownertrust
echo 7D2BAF1CF37B13E2069D6956105BD0E739499BDB:6: | gpg2 --import-ownertrust
curl -sSL https://get.rvm.io/ | bash -s stable --ruby
2洛二、安裝 ruby
rvm install ruby
3馋劈、安裝 travis 命令行工具
安裝 travis 命令行工具.
sudo yum install -y gcc ruby-devel zlib-devel
gem install travis
4、添加加密的私鑰至代碼倉庫
用 travis 命令行工具登錄 travis 服務(wù)器晾嘶,生成加密后的私鑰妓雾,保存在 github 倉庫。travis 用私鑰與服務(wù)器建立可信連接垒迂,從而實現(xiàn)免密登錄
travis login
git clone [ github 代碼倉庫地址 ]
cd [ 倉庫項目名]
travis encrypt-file ~/.ssh/id_rsa --add
運(yùn)行以上命令械姻,在 .travis.yml 中生成如下配置:
并且生成加密秘鑰文件,id_rsa.enc
5机断、坑點
1)curl 安裝必須要 key 受信楷拳,運(yùn)行以下3個命令
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499
BDB
echo 409B6B1796C275462A1703113804BB82D39DC0E3:6: | gpg2 --import-ownertrust
echo 7D2BAF1CF37B13E2069D6956105BD0E739499BDB:6: | gpg2 --import-ownertrust
2)安裝 travis 命令行工具前安裝如下:
sudo yum install -y gcc ruby-devel zlib-devel
3) .travis.yml 生成的加密私鑰配置:
當(dāng)前路徑需要去掉'',另外為了防止 ssh 時還需輸入密碼绣夺,需添加 addons 屬性
準(zhǔn)備3-安裝 docker
1、安裝 docker
#安裝 Docker
sudo yum -y install docker
#啟動 Docker 后臺服務(wù)
sudo service docker start
#設(shè)置開機(jī)自啟動
sudo systemctl enable docker
#添加 docker group
sudo groupadd docker
#將用戶加入該 group 內(nèi)
sudo usermod -aG docker user1
#重啟服務(wù)
sudo service docker restart
2欢揖、坑點
1)非 root 用戶沒有權(quán)限運(yùn)行 docker 命令陶耍,需要添加到 docker 用戶組,命令如下:
#添加 docker group
sudo groupadd docker
#將用戶加入該 group 內(nèi)
sudo usermod -aG docker user1
#重啟服務(wù)
sudo service docker restart
最終效果
提交代碼
git commit -a
git push
提交代碼后浸颓,觸發(fā)運(yùn)自動部署物臂,效果如下:
從此提交代碼后旺拉,幾分鐘后自動發(fā)布到 google cloud产上,相當(dāng)方便,希望以上采坑對各位有所幫助