iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
DevOps

嘿,稍等一下!別急著開發功能,先來打造 Walking Skeleton 吧!系列 第 25

【Walking Skeleton】Day25 - 在 Github Actions 中加入自動測試和 Linter

  • 分享至 

  • xImage
  •  

調整 Nginx 設定

一開始先來搬家一下,因為網站放在 /var 其實很怪,這是放 log 的地方,所以先在 /srv 中 git clone 把程式抓下來,然後舊的就不用理它了

sudo mkdir /srv/2023ironman
sudo chown root:2023ironman /srv/2023ironman && sudo chmod 775 $_
cd /srv/2023ironman
git clone git@github.com:miku3920/2023ironman.git .

調整一下權限

sudo chown -R root:2023ironman /srv/2023ironman && sudo chmod -R 775 $_

把 Nginx 設定中的 root 改成專案中的 public 資料夾,這樣 composer 還有 vscode 的那些檔案才不會露餡

重新載入設定檔

sudo systemctl reload nginx

調整專案

public 外面的網頁可以移除或是放到 public 中,我是都砍掉了這樣比較乾淨

deploy.yml 也要改一下,因為目錄換位置了

檢查修改都沒問題以後,就 commit push 上去看看

忘了切過去設定信任的專案了

切換成 github 使用者

sudo su github

手動 pull,並且設定安全的資料夾

git pull

再 pull 一次,發現居然有衝突

這是因為之前沒設定到 filemode,然後改了檔案權限 git 就覺得檔案被修改了,用編輯器打開 .git/config 修改一下專案的設定,或是直接輸入 git config core.filemode false

vi .git/config

改完就可以成功 pull 了

如果覺得都黑黑的什麼都看不到,也可以用 VSCode 連線進去看


加上 Linter 和自動測試

把前兩天測試過的東西在開發環境裝起來

composer require --dev squizlabs/php_codesniffer phpcsstandards/phpcsextra slevomat/coding-standard phpunit/phphunit

新增一個 .gitignore 檔案,排除 vendor 資料夾,這些額外裝的函式庫不需要放到 git 儲存庫中

在 workflow 中增加一個 test.yml

name: Tests

on:
  push:
    branches:
      - "**"

jobs:
  tests:
    runs-on: ubuntu-latest

    steps:
      - uses: shivammathur/setup-php@15c43e89cdef867065b0213be354c2841860869e
        with:
          php-version: "8.2"
      - uses: actions/checkout@v3

      - run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist

      - run: ./vendor/bin/phpcs ./
      - run: ./vendor/bin/phpcbf ./
      - run: ./vendor/bin/phpunit

還有改一下 Deploy 的觸發條件,因為測試要通過才能 Deploy

name: Deploy

on:
  workflow_run:
    workflows:
      - Tests
    branches:
      - main
    types:
      - completed

jobs:
  deploy:
    runs-on: ubuntu-latest
    if: ${{ github.event.workflow_run.conclusion == 'success' }}
    steps:
      # 設定私鑰,為了 SSH 連線進正式環境
      - uses: webfactory/ssh-agent@v0.7.0
        with:
          ssh-private-key: ${{ secrets.SSH_KEY }}

      # 設定 known_hosts,避免鑰確認指紋
      - run: echo "${{ secrets.KNOWN_HOSTS }}" >> ~/.ssh/known_hosts

      # 連線進正式環境,並且更新程式
      - run: ssh ${{ secrets.USER_HOST }} 'cd /srv/2023ironman && git pull'

還有 .vscode/setting、phpcs.yml、phpunit.yml 這些設定檔也要加進去

然後就 commit push 試看看

結果肯定是要失敗的,因為還沒把程式修正,不過確實被擋下來了呢

調整一下程式,在自己電腦上先測看看有沒有變綠燈

都修好之後再重新推一次

這次就都變綠燈了,測試成功也自動部屬到正式環境了

CI/CD 其實並不複雜,只是網路上的範例有點少,需要自己多嘗試幾次,希望你也可以成功把它設定好


上一篇
【Walking Skeleton】Day24 - PHP_CodeSniffer:使用 Linter 來提升 PHP 程式碼品質吧!
下一篇
【Walking Skeleton】Day26 - 安裝與介紹 Laravel
系列文
嘿,稍等一下!別急著開發功能,先來打造 Walking Skeleton 吧!34
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言