• 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  $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"
  • 相关阅读:
    响应头中的 ETag 值是如何生成的
    http请求状态码
    RPC 和 REST 有什么优劣
    comet 长轮询与 node 实现
    HTTPS 加密
    iterm2 快捷键
    static in C/C++
    03-树3 Tree Traversals Again
    2016.03.19随笔
    03-树2 List Leaves
  • 原文地址:https://www.cnblogs.com/liugx/p/10339010.html
Copyright © 2020-2023  润新知