一開始先來搬家一下,因為網站放在 /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 連線進去看
把前兩天測試過的東西在開發環境裝起來
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 其實並不複雜,只是網路上的範例有點少,需要自己多嘗試幾次,希望你也可以成功把它設定好