PTT推薦

[討論] 公司內部版控

看板Soft_Job標題[討論] 公司內部版控作者
TurtleGods
(我阿肥拉)
時間推噓21 推:22 噓:1 →:91

剛剛打得不見馬的

第一次在板上發文,看板規應該是可以發

如果有問題請告知刪文謝謝


本身有相當多的鬼故事,不過我想先解決問題


1.多程式版控

我們有一個版本庫,裡面包含了很多程式

而且是互相關聯的,也就是A程式要B程式先Build過,A程式才能compile

C程式也有可能跟B關聯,然後又多關聯一個D and so on

變成說,CI CD沒辦法去compile,因為沒有意義,也不會過

版本庫內又塞了一火車的exe跟dll

有趣的是,這些dll要手動放到主程式內才有功能,主程式又另外有一個版本庫

所以....這個版本庫的版控,跟主程式有可能不一樣...

而且主程式做的版控,根本看不出來dll有甚麼差異

你根本不知道誰更新了甚麼東西


我現在在想,是否可以用pipeline,去放到指定的路徑做更新

這樣就變成我不用去手動放,尤其主程式dll又沒辦法分辨差異

只是編譯就是由地端去做



鬼故事是,這個主程式其實有三個

然後根據前輩所言,這三個的dll其實都有差異....


2.自動化部屬

我們目前主程式的部屬方法,是使用一個部屬清單.txt

要上線前,工程師們會更新此上線清單,並且寫入相對應位置

pipeline會去抓取該清單,然後將相對應的程式放進去更新



問題來了,如果沒寫進清單的程式,就不會部屬

也就是說,版本庫跟在線上跑的程式,有可能是不同東西

有可能下次上線,你會把別人更新的未知程式丟上去....

我嘗試使用git diff跟當前上線origin/master做差異比對

分支使用該pipeline,可以把有做變更的程式給部屬上去

會這樣做的原因,是因為咱版控老大,說我不能全部程式更新

鬼故事來了,因為上線程式跟我們的版控可能有差異

所以我做了這樣的嘗試,這樣操作會有甚麼額外問題要注意的?



額外的鬼故事,我們平常的測試環境

我用了這種方式去部屬,然後被人靠腰後才發現我把別人程式蓋掉

因為他們會去server端把程式拿出來做比對,再把程式手動放進去

所以我用測試分支搭配此pipeline去部屬我的程式,會抓不到別人更新的內容而蓋掉....
前輩說我不能這樣破壞別人的程式,每一次要放進測試環境都要比對

我哪來那鬼功夫每次做這種事情



然後我真的覺得寫部屬清單實在有夠白癡,真的白癡到個無極限

因為工程師有可能忘記放進去自己的更新

但是我前輩卻堅持一定要用這個,不然會部屬錯程式zzzz

我說你這樣不是會讓沒有上線的程式,進入上線程式的版控嗎?

他說部屬清單沒有,沒事

所以我甚至還寫一隻Powershell程式,來把該次上線變更內容條列出來

我實在無法接受使用部屬清單上線..


3.平行上線分支的開發方式

我們只有一個準備上線環境,搭配QA測試會有時間差

這周QA測試上線一版,下周上線另一版,可是第三周才會把第一周的把程式上線

也就是說,這個環境同時會有兩個上線分支


但是,因為測試會搭配BUG修正

兩個分支會互相干涉,尤其同支程式

搭配上我們同仁們,還會用複製資料夾的方式來備份

併來併去併成鬼樣,可以怎麼改善?



以上

來聊一點鬼故事

我們的dll版本庫,總共有3個主程式,然後據說3個版本皆不相同


程式部屬一定要使用部屬清單,不然會怕部錯程式,可是沒部屬到的可以手動丟進去

無法退版,尤其多人同時開發一支程式更困難,所以我們會有上線失敗問題
(目前發生會採裝死趕快bug fix的方式)

我的想法是,開發給QA的測試分支DEV,跟實質上線分支應該要分開

確認開發完成,工程師再分別併入上線分支

任何一人的有問題,則revert該次合併commit即可

但是我前輩一直保證會有人開發不該上線的程式,所以不能自動部屬

即使我說了,工程師怎麼會放進不該上線的程式,PR的人怎麼會讓他併進去

還是被要求一定要去寫一支永遠都會有衝突的部屬清單

而且每一次上線負責人都要去一個一個人問,因為部屬清單無法辨別負責人



某些層面上,我真的覺得我們的程式還能動是奇蹟

我們單位上,100%的前輩不懂git

我是轉行過來的,本來也不懂,所以我花了點時間學

程式寫得好不好再說,這種基本功....

然後進來大公司後.....

是我的問題,還是我該逃命,我很努力跟主管提需求跟修改計畫...

實在力不從心



感謝你各位看這麼多

--

戒除少女漫畫有甚麼難的?

我就成功過好幾次

--

※ PTT留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.225.179.239 (臺灣)
PTT 網址

f2672430912/29 00:15找下間 你領多少幫公司操心這個

nh60211as12/29 00:25同意樓上,然後第二點看起來你們實際上只有一個測試環

nh60211as12/29 00:25境,所以你不應該使用自動化部署蓋掉別人的改動。

我們有一個測試環境跟一個準上線環境 測試環境給工程師用,準上線環境會給QA測試使用 我是聽從說測試環境就給我們隨便丟程式塞,結果剛好該次有同事也開發同一隻 被蓋掉後還high light 我只想說,是因為我做自動化測試 不然你根本不知道是誰蓋你的(因為平常所有人都是手動處理) 雖然我確實不應該蓋掉別人程式,對你是對的 不過目的上是希望可以自動化部屬準上線程式跟正式上線程式 我只好先從測試環境測試

ntpuisbest12/29 00:26你也在金融業嗎?

沒辦法透漏太多欸QQ

BlacksPig12/29 00:30dimension版控系統?你要在既有設計的系統與版控下去

BlacksPig12/29 00:30透過其他方式解決,有可能增加其他人不能接受的複雜度

BlacksPig12/29 00:30。根解就是系統跟版控重構解耦或是快逃(認真)

我現在就是想要解構重弄 新進的都能接受,但是掌權的在老人手裡,他們完全無法接受 我提出討論跟解決方案嘗試,被懟說這只有你會用 真的沒塌掉是奇蹟

nh60211as12/29 00:37真的想解決這個問題的話就要思考怎麼把你希望的解決方

nh60211as12/29 00:37法帶進開發流程,都是老實講你有這個想要改善的想法把

nh60211as12/29 00:37他帶去更好的公司應該對你更有幫助

我剛進來的時候,看到commit history長這樣 2024xxxx 程式更新 我差點把胃吐出來

asdfghjklasd12/29 00:38不能合併?

你是說平行分支合併嗎? 這部分被搞得很複雜 有人要退版,結果會變成兩支分支一起退版 然後又因為開發分支合併多次,導致很容易出問題 又有同事會用手動退版,自己把寫的內容挑出來刪掉 退來併去的,我常常覺得公司錢真的很多,浪費時間在這種瑣事上 而且居然還沒垮掉

viper970912/29 00:40滿有意思的~不過真的推不動也只能找下間+1

我真的是打從心底沒辦法接受部屬清單這件事情 題外話,我前公司用SVN,但是當時面我的主管說會用git 直到我去學git才發現根本就沒人會用 總共六個工程師,3個人的開發project我推不動git 我老闆覺得浪費時間,新的主管工程師說不要這麼麻煩 然後老屁股工程師說,SVN太多commit很難看,不要一直commit 即使我用git去併svn,我都沒管別人了還會被老屁股靠邀 現在公司更大,根本變成天方夜譚

neo527712/29 00:55也太亂了吧.....

neo527712/29 00:56要解決1就是重新拆分程式組件化可以輕鬆很多

neo527712/29 00:57妳所有難題都是從1來的

neo527712/29 00:58git 有sub module 整理完程式之後好好規劃這部分

我有想過sub module 但是要把所有DLL 程式庫個別拆分出來 他們現在全部包成一包 然後部署清單這個是另一個故事…

neo527712/29 00:59起碼可以解決過度相依的問題...

neo527712/29 00:59DLL要變更就是他自己的板控,這樣就不會有版本問題

neo527712/29 01:00前面這塊確定,這樣後面佈署也不會是問題CICD可以指定檔

neo527712/29 01:01案複製去任一資料夾就只是看要選哪套自動化的組合而已

那就跟我的想法相同 CICD時去指定

yoyo89012112/29 01:12沒有主管支持就是快逃

zys12/29 01:18傻眼耶 原來真的有公司的CI/CD是這樣搞的 難以想像 你們是用

zys12/29 01:18Jenkins嗎

andrew510612/29 01:57有想朝devops發展可以試試,沒有的話別碰,到時候有問

andrew510612/29 01:57題都算你的,沒問題還是你的

我還直接表明沒關係問題算我的 但是你真的不要太期待 複製資料夾當備份…

andrew510612/29 01:58這種永遠都不是技術問題,每次都是人的問題,一些垃圾

andrew510612/29 01:58方法提解決方案還被說幹嘛那麼麻煩就很想給他巴下去==

這點是我別的憤怒原因就別提了 我到職的時候就跟主管提過這會出事的 接著搭配著我各種拐彎抹角分享技術的形式 教同事怎麼使用 然後,主管還是只聽前輩講的 改善流程計劃也是參考前輩的意見 我都用各種形式去讓他知道我會這工具 但是前輩在這位子資深 換來的是,他們還是在抓鬼藥單 欸對,連一點意見都不打算跟我討論一下 我被問過,為什麼我要照三餐Commit 呵呵呵…

neo527712/29 02:09有逃命的選項也是可以直接逃啦

saladim12/29 02:37其實這不一定是用哪種tool的問題 是release flow的問題

saladim12/29 02:39flow沒先大家談好 科技幫不了你們 就是你們是每分每秒都

saladim12/29 02:39想上patch/code change, 也只能談好update pipeline的時

saladim12/29 02:41間點跟各個lib的版本 沒有那麼簡單也不是用某某tool就OK

我們有可能update 發現部署清單忘記改 然後需要重新跑一次,一次跑30分鐘 我們的天才pipeline ,會把整包程式丟進server 接著根據部署清單挑檔丟入更新 因為真的太慢了 我才嘗試用差異部署的方式加快 用git diff 找出差異檔案挑檔部署 5分鐘結束

legnaleurc12/29 02:48主管都沒差你幫他們操什麼心,省點力找下一間比較實

legnaleurc12/29 02:48

ssccg12/29 03:49版控不是只有程式碼版控,建置產出的程式也要版控啊

ssccg12/29 03:50A依賴B沒問題啊,A建置時去拉指定版本的B產出的程式

ssccg12/29 03:50exe和dll也一樣,全部進到同一個產出程式的版控裡啊

ssccg12/29 03:59你們問題看起來就是程式碼到執行環境間少了一個repository

我們現在是主程式一個Repo DLL exe 自己一個Repo

nacy20432712/29 04:38找下家 改了你也不會加分 改差了黑鍋就是你 說得動主

nacy20432712/29 04:38管才是重點 沒人挺你妄想改變公司什麼太難了 我懂 台

nacy20432712/29 04:38灣一堆毒瘤技術前輩只是因為老不是因為技術好 又在公

nacy20432712/29 04:38司時間跟三葉蟲一樣久 久了就越來越沒動力幫公司優化

nacy20432712/29 04:38什麼上版流程 優化自己履歷還差不多

nacy20432712/29 04:42「這只有你會用」你要嗆回去啊 你們不會嗎?不會要學

nacy20432712/29 04:42啊 這有很難嗎?

nacy20432712/29 04:43現在99%工程師都在用的東西不學?公司讓你來工作是來

nacy20432712/29 04:43說「我不會」的嗎?然後隔天跟主管說要離職XD

因為我知道嗆人不會改善什麼 我知道這群人不懂,我還特地拉時間出來開課 以分享的形式跟這些人分享,我還上了至少三次 題外話,我一直以為我才是那菜雞 接著看到他們在網頁上面commit 還有各式各樣的commit log 「程式更新」「update」 「兩千三百萬人都驚呆了」 以為大公司學流程的 結果大公司是撒$$

mozume12/29 06:42我開始懷疑你跟我同公司,你家系統應該歷史很古老,超過

mozume12/29 06:42三十年,中間接手過很多人,現在負責人已經是n手也改不動

mozume12/29 06:42,你家cicd不會是azure吧XD

欸對,是公司內部Azure 以前叫TFS,現在應該改名了 我覺得不是改不動,要不要改而已

airtsubasa12/29 08:02這是政治問題 你是新人嗎?是的話 嗯 不是的話,等你

airtsubasa12/29 08:02有權有勢再做

等到有權有勢估計要去棺材裡面等

B098869808812/29 09:08這是政治問題 不是你問到什麼比較好的做法去講講課

B098869808812/29 09:08他們就會聽你的 大家出來都混口飯吃而已 憂國憂民不

B098869808812/29 09:08如管好你自己

真的,我這麼累幹嘛 搞了半天沒人屌我沒人支持的 反正要死一起死

schemer12/29 09:24聽起來很像應該要有套件管理,但是變成手動在做?不是很

schemer12/29 09:24確定貴公司用的框架,以Java來說,各自的程式庫jar會有

schemer12/29 09:24獨立repo,也有自己獨立的release cycle。反正就各自bui

schemer12/29 09:24ld ,放到nexus server就好,主程式或是有相依的程式庫

schemer12/29 09:24,需要就更新自己的pom檔,類似的邏輯應該很多框架都會

schemer12/29 09:24有吧?

可能真的要獨立出來repo 我在思考一次提出30-40個repo的可能性 呵呵呵哈哈哈哈,不可能QQ

wulouise12/29 09:46mono repo然後全部cicd重新compile 不然就快逃

flylover12/29 10:12軟體只要能動就不要去改它,舊架構再爛也不要去亂動它

flylover12/29 10:12,公司要的是軟體繼續改版賣錢,不會在意技術上改的多

flylover12/29 10:12好或多爛

我改程式改到覺得自己烤雞大概會死去 請你去煮一盤大便,然後問你大便怎麼煮的這麼難吃 而且還煮很久,oh我的老天鵝

stepnight12/29 10:12這是人的問題,沒救,等你位置比他高

stepnight12/29 10:12才有可能改變,我上一間也87%像

stepnight12/29 10:12手動部署、版控亂七八糟,所以我逃了

flylover12/29 10:13全力改好也沒人懂,改後出的所有 bug 全算在你頭上,誰

flylover12/29 10:13扛的起?

我還真願意扛 看到從20241010.ear拿回舊版本退版 然後一個程式一個程式挑出自己寫的 真的豆頁疼

Sayter12/29 10:14maybe monorepo + bazel,common libs 可以寫一個 build

Sayter12/29 10:14rule,只是大家版本要先一致

我有提過,我們現在同步上線版本 以此為基準開發,我可以不用做差異部署 鬼故事就是,我們的測試環境跟上線不是同版本 你這樣會害某些人的測試程式不見 WTF !? $@:&18’xnalon!£\*]¥,€]]

stepnight12/29 10:17另外這種職場有毒,新人進去陣痛期很長

stepnight12/29 10:17受不了的、看不下去、有能力的都會早早走了

stepnight12/29 10:17留下來的多半是走不動、或變成這形狀的人

stepnight12/29 10:17有點劣幣驅逐良幣了,勸你快逃

Bencrie12/29 10:19這麼不爽還不跳一定是給的錢太多了 XD

畢竟本科不是這行 需要靠跳 說真的,會改到懷疑是自己的能力太爛還是架構太差 師爺說:「掙錢麻,不寒磣」

Ekmund12/29 10:27不知道是你家量體太大還怎樣 我怎麼覺得聽起來正常...

公司蠻大的 程式會大我覺得只是管理不當

Ekmund12/29 10:27那些相依的proj 其實跟你用開源套件 甚至語言及平台本身

Ekmund12/29 10:27支援的版本是一個概念 只是不是你在控 所以你不覺得有異

Ekmund12/29 10:27因為通常只要保證向下相容就好 大部分情況皆會啦

Ekmund12/29 10:27也沒必要每次build就從相依根源開始 所以拆成主體+dll

Ekmund12/29 10:27各有各的repo的形式也可以理解 全看上層proj的owner決定

Ekmund12/29 10:27有沒有必要隨時跟進 所以說起來這還真不是單一RD能解的

Ekmund12/29 10:27畢竟要做mono repo 還得看什麼角度下去切分

Ekmund12/29 10:27layer/domain/BU...what ever

Ekmund12/29 10:27感覺只能找人一起向上提 讓各leader關一間後 2也會解決XD

所以我目前想到的是 主程式的版控就負責自己的部分 DLL的部分,交由pipeline去處理 畢竟由主程式去控制一個無法檢視差異的DLL 不合理 那DLL的部分,就由各地端自行處理編譯 這樣即使主程式有問題,也能找出是某次DLL更新造成的 甚至是退版也會比較簡單處理 也不用全部拉出Repo處理 只不過變成pipeline可能會寫很多

Ekmund12/29 10:30通常這種問題要說服不能用開發角度 要用管理成本才講得通

Ekmund12/29 10:33但你有多硬 以及領的錢值不值得花這個effort 就看你啦

說實在的 每個人都在想自己領的夠不夠花心力做 我只是想把事情做好 嘗試從上從下滲透進去 寫報告給主管看可以多節省時間 幫同事做退版跟備份 開會後花半個小時到一個小時跟大家解釋原理 不過換來的,好像只有這東西只有你會用 說到就火,我在提解決方案,你在安心養老 對不起,我上下管理能力不足

Ekmund12/29 10:45我是覺得你家東西看來明顯需要decouple跟加一些中間規則

Ekmund12/29 10:45就算用了你的做法還是會整天進進退退 跑這就飽了

Ekmund12/29 10:45所以你跑比較快 嗯

lylu12/29 11:10真的要推就自己搞一套獨立環境跟其他人分開跟上頭說是備援

lylu12/29 11:10用的 等到哪天原本的爆炸就可以拿出來邀功了 但等於是要多

lylu12/29 11:10花心力做這事

公司內不能自己架環境 而且跟別人版控就是個問題了 我們的測試環境是手丟的跟手動比對的…

shockrabbit12/29 11:13這個制度已經運行多年,很難以一己之力去撼動。

sniper282412/29 11:14趕快去找下一間比較實在==

a74012512/29 11:15整個看下來 就是快逃阿

※ 編輯: TurtleGods (36.225.179.239 臺灣), 12/29/2024 11:18:50

simon120312/29 11:19主管不支持==沒戲唱,我也懂你整天被逼著吃屎的心情,

simon120312/29 11:19只能說快逃,不要讓自己習慣吃屎

simon120312/29 11:20除非他錢給得夠多

Arbin12/29 11:20我自己現在就是在搞獨立環境 從Git-SVN開始 甚至想搞本地C

Arbin12/29 11:20I/CD 因為我也知道開發習慣這件事真的很難改==

Arbin12/29 11:22但是我公司都還沒到你公司那麼大便就是了 頂多甲方有改東

Arbin12/29 11:22西不跟我們講 自己長出東西部署又有問題 公司還要想辦法甩

Arbin12/29 11:22

miloisgood12/29 11:34金融業+1

superpandal12/29 11:39你就管好你自己負責的就可以了 自己負責的東西有要上

superpandal12/29 11:40線再丟清單就好

superpandal12/29 11:45順帶調低自己開發的步調半養老

Dommgifer12/29 11:50你不用操心 你操心就會是你處理 然後不會有人感謝你

superpandal12/29 11:52只要沒有其它痛點是可遇不可求的職位

superpandal12/29 11:55可以有多的時間去沉澱去思考其它的東西

superpandal12/29 12:06以逸待勞 以靜制動