GitHub + circleCI 自動構建/自動部署, 這裏略過了單元測試,以部署 laravel 應用爲例子php
比起 gitlab + ansible + genkins 操做起來節省了不少硬件資源,感謝 微軟 免費了 GitHub 私有倉庫laravel
一、GitHub 相關git
a、建立 github 倉庫(如今能夠免費建立私有倉庫了,我的項目能知足了)github
b、配置 SSH 公鑰,能夠走 SSH 渠道免密 拉取代碼docker
二、circleCI 相關json
a、github 登錄 https://circleci.com ,建立一個任務,直接關聯 github 的某個倉庫bootstrap
b、配置此任務構建時 從 GitHub checkout 代碼時 的 SSH 憑證,從github 配置的ssh key中選一個便可api
c、配置此任務部署時須要部署的 一對SSH的密鑰(隨便在哪裏生成都行)中的 SSH rsa 私鑰,******* 注意 : 將遠程服務器須要在 ~/.ssh/authorized_keys 把在circleCI上部署的死要對應的公鑰(id_rsa.pub)另起一行追加進去緩存
三、整合代碼bash
代碼中加入.circleci文件夾,並添加配置信息,就簡單的實現自動構建和自動部署了
部署後的站點
建立一個倉庫並配置部署key
circlrCI 任務後臺配置 代碼檢出須要用到的 github ssh key,直接選一個便可
circleCI 配置能用SSH 私鑰登錄遠程服務器的 key
circlrCI 配置任務信息
circlrCI 配置任務執行過程當中能夠執行的腳本
circlrCI 後臺能看見任務列表
具體的 構建/部署任務 詳情
對於我的站點來講,節省了很多手動操做時間
最後,附上 .circleci 的配置和相關腳本
config.yml
version: 2 jobs: build: docker: - image: circleci/php:7.1-browsers working_directory: /tmp/workspace steps: - run: echo "====================構建開始==============================" - checkout - restore_cache: keys: - v1-dependencies-{{ checksum "composer.json" }} # 若是沒有匹配的緩存則使用最新的緩存 - v1-dependencies- - run: composer install -n --prefer-dist # 運行單元測試 # - run: phpunit - persist_to_workspace: root: . paths: - ./* - run: echo "====================構建完畢==============================" deploy: machine: timezone: Asia/Shanghai # 設置上海時區 enabled: true working_directory: /tmp/workspace steps: - run: echo "====================部署開始==============================" - attach_workspace: at: /tmp/workspace - run: pwd && ls -al - run: name: Deploy Over SSH command: ./.circleci/deploy-master.sh - run: echo "====================部署完畢==============================" workflows: version: 2 build-and-deploy: jobs: - build - deploy: requires: - build filters: branches: only: master
deploy-master.sh
#!/usr/bin/env bash user=root host=xxx.xxx.xxx.xxx src=`pwd`"/" des=/data/www/api.www.zjj7.com/ now=`date +"%Y-%m-%d %H:%M:%S"` rsync -vzrc --delete --exclude ".git" --exclude ".env" --exclude ".circleci" $src $user@$host:$des ssh $user@$host "sudo chown -R www:www $des" ssh $user@$host "chmod -R 775 $des/bootstrap/cache && chmod -R 775 $des/storage && cd $des && pwd && ls -al" echo "$now update $host $des code"