iT邦幫忙

2023 iThome 鐵人賽

DAY 20
0
DevOps

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

【Walking Skeleton】Day20 - 連自己連線進去 git pull 都懶嗎?交給 Github Actions 幫你做吧!

  • 分享至 

  • xImage
  •  

建立一個 github 使用者

先來設定一下使用者預設的 home 目錄裡面要有哪些東西,把 .bashrc, .vim 這些都丟進去,這樣建立新使用者時就不用再設定一次了

sudo cp .bashrc /etc/skel/.bashrc
sudo cp .bash_logout /etc/skel/.bash_logout
sudo cp .profile /etc/skel/.profile
sudo cp -r .vim /etc/skel/.vim
sudo cp .vimrc /etc/skel/.vimrc

檢查一下有沒有放成功

sudo ls -al /etc/skel/

開始建立 github 使用者,並且將它加入 2023ironman 群組中,以便修改網站程式

sudo useradd github -m -d /home/github -s /bin/bash -G 2023ironman

查看一下群組列表確認是否建立成功

cat /etc/group


切換使用者到 github,並且開始設定金鑰

sudo su github

先回到家目錄,使用者是 github 卻在 admin 家感覺就怪怪的

cd ~/

建立第一組金鑰,這是為了在正式環境用 git pull

ssh-keygen -t ed25519 -C "github@2023ironman"

把公鑰讀取出來

cat /home/github/.ssh/id_ed25519.pub

並且設定到專案的 deploy

建立第二組金鑰,這是為了讓 Github Actions 用 SSH 連進正式環境用的

ssh-keygen -t ed25519 -C "github@deploy"

把公鑰放到 authorized_keys 檔案中,這樣才能從外面登入到這個使用者

cat /home/github/.ssh/deploy.pub >> ~/.ssh/authorized_keys

這次是取出私鑰

cat /home/github/.ssh/deploy

在專案設定中點開 Secrets > Actions,建立一個 secret

把剛剛的私鑰貼到裡面,並且命名成 ssh_key (大小寫沒差)

在開發環境(自己電腦)把正式環境的伺服器公鑰複製起來

cat ~/.ssh/known_hosts

新增一個 secrets 叫做 known_hosts,並且把剛剛的公鑰貼進去,為了讓 Github Actions 不要卡在確認指紋,所以先搬過去

還有一個 user_host,為了不讓人知道用了哪個使用者和 IP 部屬

這樣就設定完成了


用 github 這個使用者先手動 git pull 看看

現在是在正式環境,先移動到網站的資料夾中

cd /var/www/html/

輸入從 github 把程式拉下來的指令

git pull

看來要先加入信任的資料夾

git config --global --add safe.directory /var/www/html

再試一次,這次可以了,確認指紋後輸入 yes

git pull

看來什麼都沒有拉下來呢,因為我們還沒修改程式嘛


回到開發環境設定 Github Action 自動部署

現在回到開發環境,在專案中新增兩層資料夾 .github/workflows/

還有在裡面新增一個 .yml 檔案,檔名可以自己取

這裡會跳出要不要裝擴充,裝都裝

把這段設定貼到剛剛的檔案中

name: Deploy

on:
  push:
    branches:
      - "main"

jobs:
  deploy:
    runs-on: ubuntu-latest
    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 /var/www/html && git pull'

最後一步 commit

還有 push

然後到 github 等待結果,亮綠燈就是成功囉,如果失敗就從自己電腦用那個私鑰連看看,還有就是 secrets 多貼幾次看看

檔案也確實更新到正式環境了呢


上一篇
【Walking Skeleton】Day19 - 在本地開發 push,在正式環境 pull
下一篇
【Walking Skeleton】Day21 - 命名空間 namespace 和 use 是做什麼用的?
系列文
嘿,稍等一下!別急著開發功能,先來打造 Walking Skeleton 吧!34
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言