iT邦幫忙

1

搭配 github 在正式環境發佈程式

您好,小弟是負責硬體與網路的MIS,最近公司導入了Github 作為程式版本控管,最後寫程式的部門(簡稱為RD)要求我們要在線上(正式)環境,直接下達 git 指令來更新程式碼。
小弟想請教各位大大的是,你們有人(公司)是這樣運作的嗎?
小弟先情境說明一下,1.小弟的程式環境OS都是Linux 2.程式都是晚間10點才進行佈署
所以小弟我都是用 Linux Script 來協助我佈署程式,不是人在晚間10才在電腦前下指令佈署。
因為RD再教我們操作的時候,都會碰到要更新的程序遇到衝突,所以要進行一連串的指令與檔案調整。衝突的原因是程式裡的其中一個設定檔,會有資料庫的帳號密碼,而這個帳號密碼不是正式環境的,正式的資料庫帳號密碼也不會給開發人員知道,因此這個設定檔,就一定會衝突。當然也不保證會不會有其他的檔案衝突。
如果有大大是直接在線上環境直接下達git 指令,能否提供一些說明,針對剛剛說的衝突,可以有一個指令可以處理,也許小弟就可以透過Script來自動化佈署,或,這一定要人為介入,可能無法自動化達成?

看更多先前的討論...收起先前的討論...
weiclin iT邦高手 4 級 ‧ 2018-08-21 23:23:49 檢舉
程式更新完以後再把正確的帳號密碼檔放進去不就好了
Homura iT邦高手 1 級 ‧ 2018-08-22 08:51:55 檢舉
.gitignore設定帳密設定檔不被上傳github
RD有這麼好做嗎= =?為何不用CI/CD?
antonio iT邦新手 5 級 ‧ 2018-08-22 11:09:20 檢舉
@weiclin 大大的意思是更新檔案前,先將該設定檔換回原先的檔案,這樣就不會衝突,待佈署後,再將正式環境的設定檔蓋過去,這樣是吧。這也是一個不錯的好方法,感謝。
設定檔可以進版控,但不包括帳號密碼的部分,
您的問題其實不要推設定檔就好,或用 .gitignore 排除,修改設定檔時才 commit,
這樣 RD 彼此推送才不會衝突,也不會覆蓋到正式端的設定檔,
同 rewrite 大大的做法。

衝突應該是 RD 這邊要解決,因為不只設定檔會衝突,
合併失敗很多時候需要工程師去判斷該如何處理。
weiclin iT邦高手 4 級 ‧ 2018-08-22 13:21:34 檢舉
rewrite 的回答是比較正式的作法, 只是原 PO 公司的 MIS 身份夠不夠力去要求 RD 改動就不清楚了, 另外還有一個作法是 git 取出最新版時都放到一個空的資料夾, 這樣一定不會有衝突, 再把實際的工作目錄連結到這個新版程式資料夾

例如: https://stackoverflow.com/questions/14443472/atomic-website-update-with-git
antonio iT邦新手 5 級 ‧ 2018-08-23 17:40:53 檢舉
@weiclin 大大真的是講到重點了
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
rewrite
iT邦新手 3 級 ‧ 2018-08-22 09:00:34

其實你們應該要把個別設定檔另外處理而不是放置於repositories(以下用repo簡稱)中

會用到git做最新版本發布,實做上都是RD寫好一組(個)功能,經過測試以後,才會發布至正式環境

也就是:
應該更新的是僅有功能的repo,而包含在repo中的預設組態檔是為了在建置新環境的第一步所放置的。

每個公司的處裡流程不同,但盡量標準化會比較好

這裡標準化的可以分為,常態變動與固定設置

  • 每寫一個功能就會異動,一定是歸類在常態變動
  • 像是一開始環境初始化時才會設置的或是A B環境同樣的檔案但是有不同的設置,這就可以規劃出另外的固定設置

p.s. 千萬千萬不要把任何的帳號密碼金鑰放到repo中,因為你不知道會在什麼請況下讓這些資訊外流,尤其是放到公開的repo

0
炎之虛空
iT邦高手 3 級 ‧ 2018-08-22 09:04:03

先說之前開發的模式
基本上我們會開兩個站台
一個測試站台(內部)跟正式站台

然後每個工程師都可以push,但是重點是push完成之後必須發通知給gitlab管理者進行合併到測試站台
如在合併的時候有衝突就必須通知push開發者解衝突(就看是誰發布的)
然後正是站台固定時間在pull gitlab 更新

大致上做法就是這樣

畢竟應該沒有一個笨蛋單位為了開發方便直接把東西上去到正式站台吧

我要發表回答

立即登入回答