はじめに
最近見たいいツイート
こういうドキュメント化のルール等明確に定めておくと、「めんどくさいからいいやぁ」って後回しにすることがなくなりそうですね。
チーム単位でこういった方針を持っておくことはとても大切だと思います。
さて、本題です。
アプリケーションの品質担保や開発スピードの向上をさせるためのCI/CDについて基礎知識を学習していこうと思います。
CIとは?CDとは?
CIとは、継続的インテグレーション(Continuous Integration)を意味し、CDは、継続的デリバリー(Continuous Delivery)を指します。
このCICD一連の流れは「パイプライン」と呼ばれることもあります。
もう少し身近なサービスで見てみましょう。
基本的に開発現場ではCI/CDはGithubのActionに紐づいて実行されることが多いです。
CIの例
-
git push
- github hooksでpre-push時に静的解析・自動テスト等を行う
-
push, merge, pull requestされたタイミング
- 特定ブランチにpushされたら静的解析・テストを実行するworkflowを設定する(Github Actions)
CDの例
-
GithubACtionsで以下のようなことを実施
- Firebase Hostingを起動し、自動デプロイ
- クラウドサーバーにSSH接続し、デプロイを行う
-
各種サービスを利用する
※ 区分が難しいですが、シェルスクリプトを実行するというのも一応手段としてあります。
サンプル
Github pre-push
pre-push
というファイル名の
pre-push
#!/bin/bash
export PATH=/usr/local/bin:$PATH
set -x
set -e
set -o pipefail
echo 'Push前処理の実行'
yarn install
yarn cache clean
yarn test
Github Action
Github ActionsでSSH接続し、Laravelをデプロイする例
deplot_to_ec2.yml
name: EC2 Auto Deploy
on:
push:
branches:
- develop
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Git Checkout
uses: actions/checkout@v3
- name: Deploy Laravel to EC2
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.EC2_API_HOST_NAME }}
username: ${{ secrets.EC2_API_USER_NAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
timeout: 180s
script: |
cd /apps
git fetch --prune
git checkout develop
git pull origin develop
php artisan optimize
php artisan config:clear
php artisan cache:clear