通過(guò)GitHub actions發(fā)布hugo到私有云服務(wù)器

繼上次分享的GitHub actions 發(fā)布到GitHub pages,收到的反饋還不錯(cuò)鳍咱,咱們這次也記錄了下編寫(xiě)腳本的過(guò)程嘴秸,過(guò)程比較坎坷伺帘,如果只要結(jié)果凑队,請(qǐng)看文章最后幾個(gè)板塊的內(nèi)容则果。

準(zhǔn)備工作

SSH key 生成

ssh-keygen -t rsa -b 4096 -C "$(git config user.email)" -f gh-pages -N ""
# You will get 2 files:
#   gh-pages.pub (public key)
#   gh-pages     (private key)

配置私鑰

如果前面讀過(guò)我的hugo通過(guò)Github Action部署到Github Pages文章幔翰,那么一定知道怎么去上傳公鑰,這里我們?cè)僦貜?fù)一下

假設(shè) 開(kāi)發(fā)項(xiàng)目為 tianhui.xin
打開(kāi)tianhui.xin倉(cāng)庫(kù)的settings西壮,再點(diǎn)擊Secrets遗增,然后添加咱們剛剛生成的私鑰,name為ACTIONS_DEPLOY_KEY

Add your private key Success
image
image

上傳公鑰服務(wù)器

ssh-copy-id appuser@10.10.10.10
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/appuser/.ssh/id_rsa.pub"
The authenticity of host '10.10.10.10 (10.10.10.10)' can't be established.
ECDSA key fingerprint is SHA256:mpM5LP8zLMh/CibV34URdTFbciAJ3fvCG1f9kSD2ITI.
ECDSA key fingerprint is MD5:60:40:77:02:5b:c6:e0:9a:e7:a3:96:bf:10:da:12:1c.
Are you sure you want to continue connecting (yes/no)? yes

輸入遠(yuǎn)程用戶(hù)的密碼后款青,SSH公鑰就會(huì)自動(dòng)上傳了.SSH公鑰保存在遠(yuǎn)程Linux服務(wù)器的.ssh/authorized_keys文件中

思考

docker鏡像每次都是一個(gè)新的做修,SSH在第一次連接都會(huì)詢(xún)問(wèn)這個(gè)一個(gè)問(wèn)題

The authenticity of host '10.10.10.10 (10.10.10.10)' can't be established.

RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.10.10.10 (10.10.10.10)' (RSA) to the list of
known hosts.
Enter passphrase for key '/home/appuser/.ssh/id_rsa':

其原因是因?yàn)?code>/home/appuser/.ssh目錄下的known_hosts不存在對(duì)你正要連接的服務(wù)器信息,也就是說(shuō)你是第一次連接抡草;那么我們是不是可以偽造一個(gè)呢饰及,喏,你還別說(shuō)康震,我還真去把自己電腦上的known_hosts的對(duì)應(yīng)記錄復(fù)制了一份上去燎含,我簡(jiǎn)直是個(gè)天才,但結(jié)果不盡人意腿短,好吧屏箍,咱們繼續(xù)折騰。

幸運(yùn)的是我在梯子的幫助下橘忱,找到了這樣一個(gè)命令ssh-keyscan赴魁,搞起??

ssh-keyscan -t rsa 10.10.10.10 >> "/home/appuser/known_hosts"

新建job腳本(測(cè)試SSH腳本)

主要過(guò)程就是測(cè)試下在docker環(huán)境下如何遠(yuǎn)程SSH

name: aliyun

on:
  push:
    branches:
      - master
jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - name: checkout
        uses: actions/checkout@master
        with:
          submodules: true
      - name: Setup Hugo
        uses: peaceiris/actions-hugo@v2.2.2
        with:
          hugo-version: '0.59.1'
          extended: true
      - name: Build
        run: hugo --minify
      - name: Deploy
        env:
          ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
          HOST: 10.10.10.10
          USER: appuser
        run: |
          SSH_PATH="$HOME/.ssh"
          mkdir -p $SSH_PATH
          touch "$SSH_PATH/known_hosts"
          echo "$ACTIONS_DEPLOY_KEY" > "$SSH_PATH/id_rsa"
          chmod 700 "$SSH_PATH"
          chmod 600 "$SSH_PATH/known_hosts"
          chmod 600 "$SSH_PATH/id_rsa"
          eval $(ssh-agent)
          ssh-add "$SSH_PATH/id_rsa"
          ssh-keyscan -t rsa $HOST >> "$SSH_PATH/known_hosts"
          ssh -o StrictHostKeyChecking=no -i $SSH_PATH/id_rsa -A -tt $USER@$HOST ls

執(zhí)行push钝诚,等待CI部署完成颖御,查看log發(fā)現(xiàn)已經(jīng)打印出了服務(wù)器的文件文件夾信息,??

測(cè)試結(jié)果

最終的job腳本

配置說(shuō)明

使用只需要關(guān)注deploy中的env配置

config description
ACTIONS_DEPLOY_KEY 連接服務(wù)的私鑰(在GitHub項(xiàng)目下的setting>Secrets配置)
HOST 服務(wù)器的IP地址
USER 服務(wù)器的部署用戶(hù)敲长,對(duì)應(yīng)的私鑰的用戶(hù)
HOME_PATH 登陸服務(wù)器后郎嫁,我們?nèi)ツ膫€(gè)目錄,一般設(shè)置為用戶(hù)目錄
DEVELOP_SH_PATH 服務(wù)器部署腳本(咱們的部署目錄還是服務(wù)器上執(zhí)行祈噪,不寫(xiě)在job中)
PACKAGE_NAME 打包的名稱(chēng)(public.tar.gz),目前只支持這個(gè)
DEVELOP_DIR 項(xiàng)目部署文件夾
BACKUP_DIR 項(xiàng)目的備份文件夾

job文件

name: aliyun

on:
  push:
    branches:
      - master
jobs:
  build:

    runs-on: ubuntu-latest
    steps:
      - name: checkout
        uses: actions/checkout@master
        with:
          submodules: true
      - name: setup Hugo
        uses: peaceiris/actions-hugo@v2.2.2
        with:
          hugo-version: '0.59.1'
          extended: true
      - name: Build
        run: hugo --minify
      - name: deploy
        env:
          ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
          HOST: 10.10.10.10
          USER: appuser
          HOME_PATH: /home/appuser
          DEVELOP_SH_PATH: /home/appuser/develop.sh
          PACKAGE_NAME: public.tar.gz
          DEVELOP_DIR: tianhui.xin
          BACKUP_DIR: backup
        run: |
          SSH_PATH="$HOME/.ssh"
          mkdir -p $SSH_PATH
          touch "$SSH_PATH/known_hosts"
          echo "$ACTIONS_DEPLOY_KEY" > "$SSH_PATH/id_rsa"
          chmod 700 "$SSH_PATH"
          chmod 600 "$SSH_PATH/known_hosts"
          chmod 600 "$SSH_PATH/id_rsa"
          eval $(ssh-agent)
          ssh-add "$SSH_PATH/id_rsa"
          ssh-keyscan -t rsa $HOST >> "$SSH_PATH/known_hosts"
          cd public
          tar -cf $PACKAGE_NAME *
          scp $PACKAGE_NAME $USER@$HOST:$HOME_PATH
          ssh -o StrictHostKeyChecking=no -i $SSH_PATH/id_rsa -A -tt $USER@$HOST sh $DEVELOP_SH_PATH \
            -d $HOME_PATH/$DEVELOP_DIR -b $HOME_PATH/$BACKUP_DIR -f $HOME_PATH/$PACKAGE_NAME
          exit

遠(yuǎn)程服務(wù)器操作

新建develop.sh

#!/bin/sh
set -e

FILE_NAME=`basename $0`

#說(shuō)明
show_usage="usage:$FILE_NAME [-d develop_path,-b backup_path -f file_path]"

#參數(shù)
# 本地倉(cāng)庫(kù)目錄
opt_develop_path=""

# 備份目錄
opt_backup_path=""

# 部署文件
opt_file_path=""


GETOPT_ARGS=`getopt -o d:b:f: -al develop_path:,backup_path:,file_path: -- "$@"`
eval set -- "$GETOPT_ARGS"
#獲取參數(shù)
while [ -n "$1" ]
do
        case "$1" in
                -d|--develop_path) opt_develop_path=$2; shift 2;;
                -b|--backup_path) opt_backup_path=$2; shift 2;;
                -f|--opt_file_path) opt_file_path=$2; shift 2;;
                --) break ;;
                *) echo $1,$2,$show_usage; break ;;
        esac
done

# 判斷參數(shù)
if [[ -z $opt_develop_path || -z $opt_backup_path || -z $opt_file_path ]]; then
        echo -e $show_usage
        exit 0
fi

if [ "$opt_develop_path" = "$opt_backup_path" ]; then
  echo 'develop_path eq backup_path'
  exit 0
fi

# 判斷部署文件是否存在
if [ ! -f $opt_file_path ]; then
    echo "$opt_file_path file does not exist"
    exit 0
fi

# 判斷文件夾是否存在
if [ ! -x $opt_develop_path ]; then
  mkdir $opt_develop_path
fi

# 判斷文件夾是否存在
if [ ! -x $opt_backup_path ]; then
  mkdir $opt_backup_path
fi

# 文件夾不是空的
if [ ! "`ls -A $opt_develop_path`" = "" ]; then
  cd $opt_develop_path
  tar -cf $opt_backup_path/$(date +%Y%m%d%H%M).tar.gz $opt_develop_path/*
  rm -rf $opt_develop_path/*
fi
# 解壓文件
tar -xf $opt_file_path -C $opt_develop_path

echo "publish success!"

給予執(zhí)行權(quán)限

chomd u+x develop.sh
執(zhí)行結(jié)果

一切準(zhǔn)備就緒泽铛,開(kāi)始你的奇妙之旅吧,碼字不易辑鲤,有問(wèn)題請(qǐng)留言交流盔腔。

相關(guān)文章:

  1. hugo通過(guò)Github Action部署到Github Pages

原文鏈接

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市月褥,隨后出現(xiàn)的幾起案子弛随,更是在濱河造成了極大的恐慌,老刑警劉巖宁赤,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舀透,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡决左,警方通過(guò)查閱死者的電腦和手機(jī)愕够,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)走贪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人惑芭,你說(shuō)我怎么就攤上這事坠狡。” “怎么了遂跟?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵逃沿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我幻锁,道長(zhǎng)凯亮,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任哄尔,我火速辦了婚禮触幼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘究飞。我一直安慰自己置谦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布亿傅。 她就那樣靜靜地躺著媒峡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪葵擎。 梳的紋絲不亂的頭發(fā)上谅阿,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音酬滤,去河邊找鬼签餐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛盯串,可吹牛的內(nèi)容都是我干的氯檐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼体捏,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼冠摄!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起几缭,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤河泳,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后年栓,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體拆挥,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年某抓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纸兔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黄锤。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖食拜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情副编,我是刑警寧澤负甸,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站痹届,受9級(jí)特大地震影響呻待,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜队腐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一蚕捉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧柴淘,春花似錦迫淹、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至第股,卻和暖如春应民,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背夕吻。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工诲锹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人涉馅。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓归园,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親稚矿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蔓倍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容