中平元年(184年),冀州常山国真定县人褚燕趁着黄巾之乱时起兵响应,聚集万余人,常山王刘暠弃国逃亡。
博陵郡人张牛角自称“将兵从事”,起兵与褚燕合并,褚燕推举张牛角为首领,一起攻打廮陶县,张牛角不幸中箭,伤重而死,临死前将军队托付褚燕。故褚燕改姓张,另以己身轻如燕,异于常人,亦号称“飞燕”。
陈志《张燕传》:张燕,常山真定人也,本姓褚。黄巾起,燕合聚少年为群盗,在山泽间转攻,还真定,众万余人。博陵张牛角亦起众,自号“将兵从事”,与燕合。燕推牛角为帅,俱攻廮陶。牛角为飞矢所中。被创且死,令众奉燕,告曰:“必以燕为帅。”牛角死,众奉燕,故改姓张。燕剽捍捷速过人,故军中号曰“飞燕”。
中平二年(185年)二月,刘宏加税,修皇宫等事,导致原本遭受战乱之苦的冀州地区百姓生活水平持续恶化,大批百姓加入黑山军。当然,还有黄巾军残余力量也加入黑山军。
朝廷(刘宏)无力讨伐黑山军,于是派使者前往招安,拜杨凤为黑山校尉,统帅其他山贼,并有举孝廉、派计吏的权力。
陈志《张燕传》裴注引《九州春秋》:灵帝不能讨,乃遣使拜杨凤为黑山校尉,领诸山贼,得举孝廉计吏。
张燕也派人至雒阳请求招安,朝廷拜张燕为“平难中郎将”。
陈志《张燕传》:灵帝不能征,河北诸郡被其害。(张)燕遣人至京都乞降,拜燕平难中郎将。
范书《朱儁传》:(张)燕乃遣使至京师,奏书乞降,遂拜燕平难中郎将,使领河北诸山谷事,岁得举孝廉、计吏。——范晔将《九州春秋》杨凤事并为张燕,疑误。
张燕其势力曾扩张至河内郡,后被太守朱儁击退【个人意见:按范书《朱儁传》,“朱儁击张燕”事在“张燕招安”之后,疑颠倒。】。
初平元年(190年),关东反董联军起事,张燕亦拥兵自重,观望时局,并未表明政治立场。
初平二年(191年)七月,袁绍取得冀州后,黑山军于毒联合白饶、眭固率军进犯魏郡、及兖州东郡,东郡太守王肱不能取胜,袁绍派曹操增援,曹操在濮阳击败白饶,因此,袁绍表曹操为东郡太守。
陈志《武帝纪》:(初平二年,191年)秋七月,袁绍胁韩馥,取冀州。黑山贼于毒、白绕、眭固等十余万众略魏郡、东郡,(东郡太守)王肱不能御,太祖(曹操)引兵入东郡,击白绕于濮阳,破之。袁绍因表太祖为东郡太守,治东武阳。于毒等人攻打魏郡事,可推于毒等人拥护长安朝廷(董卓)。
初平三年(192年)春,于毒趁曹操出兵顿丘之时,进犯东郡东武阳县【曹操所设郡治】,曹操以“围魏救赵”之计,于毒退兵,接着曹操又先后击败眭固、于夫罗【南匈奴流亡单于】。
陈志《武帝纪》:(初平)三年春,太祖(曹操)军顿丘,(于)毒等攻东武阳。太祖乃引兵西入山,攻毒等本屯。毒闻之,弃武阳还。太祖要击眭固,又击匈奴于夫罗于内黄,皆大破之。
初平四年(193年)【按陈志《袁绍传》裴注引《英雄记》,此事时为初平三年(192年),本文从范书。】三月,长安朝廷所任命的冀州牧壶寿,趁袁绍率军北上对抗公孙瓒时,联合黑山军于毒等十余部人马,并策反魏郡邺城士兵,杀害太守栗成,夺得邺城。
唯独“平汉将军”陶升背叛黑山军,趁机救出袁绍及其下属官员的亲属,投奔屯兵于斥丘县【斥丘县属冀州巨鹿郡】的袁绍。袁绍封陶升为“建义中郎将”。
六月,袁绍率军复仇,在朝歌县鹿场山苍岩谷与于毒军激战五日,斩于毒及壶寿。袁绍再围攻黑山,斩左髭丈八等人,又击败刘石、青牛角、黄龙、左校、郭大贤、李大目、于羝根等部,一时黑山为空。自此,黑山军残部拥张燕为首。
陈志《袁绍传》裴注引《英雄记》:(袁绍)乃引军入朝歌鹿场山苍岩谷讨于毒,围攻五日,破之,斩毒及长安所署冀州牧壶寿。遂寻山北行,薄击诸贼左髭丈八等,皆斩之。又击刘石、青牛角、黄龙、左校、郭大贤、李大目、于氐根等,皆屠其屯壁,奔走得脱,斩首数万级。
袁绍又率军至常山国与张燕决战,张燕联合匈奴人、乌桓人对抗袁绍,此时吕布正为袁绍效力,亲率部将冲锋陷阵,张燕军无法抵挡。双方激战多日,最终两败俱伤,罢兵。
自此,袁绍与张燕结怨。建安元年(196年)臧洪反袁绍,建安四年(199年),袁绍讨伐公孙瓒时,臧洪与公孙瓒都曾派人联络张燕为援军。张燕部将杜长前往幽州增援公孙瓒,被袁绍击败,张燕势力一蹶不振。
建安五年(200年),袁绍与曹操对峙官渡之时。张燕军未表明立场。
建安九年(204年)九月,曹操攻破邺城,领冀州牧。
建安十年(205年)正月,曹操率军攻杀袁谭。
四月,张燕见袁氏败亡,冀州易主,便率十余万人至邺城归附曹操。曹操表拜张燕为“平北将军”,封安国亭侯,封邑五百户。
陈志《张燕传》:太祖(曹操)将定冀州,(张)燕遣使求佐王师,拜平北将军;率众诣邺,封安国亭侯,邑五百户。
陈志《武帝纪》:夏四月,黑山贼张燕率其众十余万降,封为列侯。
自此,黑山军成为历史。
【黑山军名单考】