Git 連線限制
最近在設定部落格的自動更新,發現自己架的 gitea 伺服器只有對外開放 https
git 指令內預設是走 ssh 才能使用免密碼,用 key 作身分驗證
為了解決身分驗證的問題,花了一些時間整理解決方式
如果你的目的是 GitHub 或 GitLab 這種不是自己架的,不會有這問題
順便紀錄怎麼使用 drone-git-push
1. 改用 https + 帳號密碼驗證
如果原本 gitea 就已經設定好 https 連線,這是簡單方便的方式,只要改專案的CICD設定就好了
將 git remote 的設定字串,改成下面的格式就好了
|
|
如果擔心明文會洩漏帳號密碼,可以用 woodpecker secret
先在 woodpecker 中加入上面的 remote 字串,到專案的 secret
再改專案中的 .woodpecker 設定檔, remote 的地方改成調用 secret
|
|
2. IP直連
假設已經準備好 ssh key (如果沒有,可以跳去後面看完整教學)
預先調整網路設定,讓 woodpecker 伺服器跟 gitea 伺服器可以用 IP 直連
例如穿透、轉發或乾脆放同網段
改完之後,將 git remote 改成如下格式,搭配原本的 key 連線即可
|
|
如果 gitea 的 ssh port 不是在預設的 22
|
|
3. revers proxy 轉發 22 port
這個方法是第一個方法的延伸,如果有時間設定建議可以改成這樣,後面使用也比較方便
既然 gitea 用非標準的 port,那就在 revers proxy 改回來就好了
當然,如果你能直接改 gitea 的 port 最省事
通常 revers proxy 會設定讓大部分內網段都能連到(至少我是這樣設定),不用再重複設定網段穿透
至於對不對外開放可以另外考慮,我只設定內網不同網段也可以連到
設定方式請參考 Gitea - 自己的 Git 自己架
drone-git-push 使用教學
例如使用 ssh key 認證,push 到 github 上
設定連線 SSH Key
使用指令產生公私鑰
|
|
中間 -f 可以自行選擇存放的位置跟檔名
如果沒指定 -f ,預設存在 ~/.ssh/
完成之後會生成 keyname 跟 keyname.pub 兩個檔案
keyname.pub 就是公鑰
keyname 就是私鑰,必須要保存好
將公鑰上傳到 github
到 github 點右上角大頭貼 > settings > 左邊 SSH and GPG keys
點 new SSH key, title 打方便辨識的名字,例如我就放一個 Key 是 woodpecker 專用
將 keyname.pub 的內容貼上就完成了
將公鑰的內容貼進去就可以了
將私鑰內容貼到 woodpecker secret
打開 woodpecker 到專案內點齒輪設定 > Secrets
點 add secrets
name 可以寫個方便辨識的名字
value 貼上私鑰的內容 (END後面的換行要保留)
|
|
Avalable Plugin 可以指定這個 secret 只有哪個步驟能用
例如我可以填上 appleboy/drone-git-push
,就只有 image 用到 drone-git-push 這些步驟能用
留空白代表不限制
Avalable at following event 可以指定在哪些 git 或 woodpecker 操作可以使用這個 secret
這邊的 git 操作指的是你的操作觸發 woodpecker,而不是 drone-git-push 內的動作
woodpecker 設定檔
照前面設定把 Key 跟 secret 設定好之後,就可以在流程內加步驟了
|
|
上面寫的是基本用法
如果除了 git push 的指令還需要跑別的東西,可以用 commands
例如,我的編譯跑完之後,我只想推送編譯完的檔案出去,而不是專案原始碼
- 先 cd 進到編譯完的 public 資料夾
- 初始化儲存庫
- 強制推送至 github
|
|
隨副 drone-git-push 用法參考
https://woodpecker-ci.org/plugins/Git%20Push