GitHub + circleCI 自动构建/自动部署 应用

Posted liugx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GitHub + circleCI 自动构建/自动部署 应用相关的知识,希望对你有一定的参考价值。

 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  [email protected]$host:$des

ssh [email protected]$host "sudo chown -R www:www $des"

ssh [email protected]$host "chmod -R 775 $des/bootstrap/cache && chmod -R 775 $des/storage && cd $des && pwd && ls -al"

echo "$now update $host $des code"

 

以上是关于GitHub + circleCI 自动构建/自动部署 应用的主要内容,如果未能解决你的问题,请参考以下文章

CircleCI 自动增量泊坞窗标签

在 CircleCI 工作流或作业之后触发 Github Action

如何只在 GitHub 主分支上运行 CircleCI?

xcodebuild 归档失败,CircleCI 上的退出状态为 65

从 circle ci 访问 MySQL GCP 以自动化数据库迁移?

使用GitHub Actions自动构建DockerHub镜像