GitHub + circleCI 自动构建/自动部署, 这里略过了单元测试,以部署 laravel 应用为例子
比起 gitlab + ansible + genkins 操作起来节省了很多硬件资源,感谢 微软 免费了 GitHub 私有仓库
1、GitHub 相关
a、创建 github 仓库(现在可以免费创建私有仓库了,个人项目能满足了)
b、配置 SSH 公钥,可以走 SSH 渠道免密 拉取代码
2、circleCI 相关
a、github 登陆 https://circleci.com ,创建一个任务,直接关联 github 的某个仓库
b、配置此任务构建时 从 GitHub checkout 代码时 的 SSH 凭证,从github 配置的ssh key中选一个即可
c、配置此任务部署时需要部署的 一对SSH的密钥(随便在哪里生成都行)中的 SSH rsa 私钥,******* 注意 : 将远程服务器需要在 ~/.ssh/authorized_keys 把在circleCI上部署的死要对应的公钥(id_rsa.pub)另起一行追加进去
3、整合代码
代码中加入.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"