高丽人内部发生政变,盖苏文杀死高丽王高武,又用计拥立高武的侄子高藏为王,并且还自封为高离支。
太宗得知后,与大臣商议,认为攻取高丽不难,只是不想烦扰百姓,打算先容忍一下,等他们更加骄横,作恶更多后,再去讨伐。
贞观十七年(公元643年)九月,新罗派使者来,说百济攻取了他们国家的四十多座城,又与高丽军队联合,图谋截断新罗到唐的道路,请求派兵救援。太宗命令司农寺丞相里玄奖带着皇帝的诏书前往高丽,对他们说:“新罗归顺大唐,朝贡不少,你们与百济最好都停战,如果继续进攻,明年就发兵进攻你们。”
次年七月,太宗打算征讨高丽,下令造船,用来运送军粮,又下诏派遣营州都督张俭等人,督帅幽、营二都督府的士兵,以及契丹、奚、靺鞨(mòhé)的军队,先行进攻辽东,试探那儿的情况。
十一月,任命刑部尚书张亮为平壤道行军大总管,率领士兵四万三千人,战舰五百艘,从莱州入海,直趋平壤。任命太子詹事、左卫率李世为辽东道行军大总管,统率步兵、骑兵六万人,以及兰、河二州投降的胡人军队,前往辽东。两军相互呼应,同时前进。
李世勣率军从柳城出发,多方营造声势,做出将要取道怀远镇的样子,实则秘密挥师向北,前往甬道,给高丽来了个出其不意。
贞观十九年(公元645年)四月初一,李世勣从通定渡过辽水,到达玄菟(tù)。高丽人大惊,各城都闭门守备。
十五日,李世勣、江夏王李道宗进攻高丽盖牟城。二十六日,攻克盖牟,俘虏两万多人,粮食十多万石。五月初二,进军到辽东城下。初八,打败了来救援的高丽骑兵。
太宗自二月亲率军队从洛阳出发,此时也已到达。五月初十,太宗车驾渡过辽水,随即撤除浮桥,以此坚定将士们的决心。
太宗亲自带领几百骑兵来到辽东城下,见士兵们正在背土填壕沟,就分了很重的一块土,在马上抬着,于是随从官员争着把土背到城下。
李世勣昼夜不停地进攻辽东城。到了第十二天,太宗带领精兵与他会合,把城团团围住,围了好几重。
十七日,南风刮得很大,太宗派勇士爬到冲竿顶上,点着了西南面的城楼,火借风势,延烧到城里。于是指挥将士们攀登城墙,高丽守军抵挡不住,辽东城被攻克。唐军杀死一万多人,俘虏士兵一万多人、男女百姓四万人。
二十八日,唐军进发到白岩城下。在第二天的战斗中,右卫大将军李思摩中了弩箭,太宗亲自为他吮血。将士们听了,没有不受感动的。
六月初一,李世勣攻打白岩城西南边,太宗亲自驾临城西北。城主孙代音偷偷派心腹请求投降,约定唐兵临近城池,扔出刀斧为信号,说:“我愿意投降,城里没有不听从的。”
太宗把唐朝的旗帜交给使者,说:“一定投降的话,可以把旗子插在城墙上。”孙代音插上旗子,城里的人以为唐朝军队已经登上城楼,于是都跟着孙代音投降。
十一日,太宗车驾从辽东城出发。二十日,到达安市城下,发兵攻打。二十一日,高丽北部首领高延寿、高惠真率领高丽、韩路士兵十五万人援救安市,被唐军打败,高延寿、高惠真带领部下三万六千八百人请求投降,太宗将俘虏的三千三百名士兵全部活埋。
八月初十,唐军将营帐迁移到安市城南。太宗在辽东,凡是设立营帐,只在明处安排哨兵,而不设堑壕堡垒。即使逼近高丽城池,高丽人也不敢出城袭掠,士兵或单独出行,或在野外宿营,就像在中原一般。
九月,各路大军紧急进攻安市城。太宗听见城里鸡和猪的叫声,对李世勣说:“围攻了很久,城里炊烟越来越稀少,现在鸡和猪叫得厉害,一定是在犒劳士兵,想在夜里出来偷袭我们,应当严加防备。”当天夜里,高丽几百士兵顺着绳子从城墙上爬下来。太宗听说后,亲自到城下,召集士兵紧急进攻,斩首几十人,剩余的高丽兵退逃。
李道宗率领部下在城东南角堆筑上山,渐渐逼近城墙,城里也不断增高城墙抵挡。士兵们轮番交战,每天交战六七个回合。唐军用冲车发射石块,撞坏城墙,城里随即用木栅堵住缺口。李道宗的脚受伤,太宗亲自为他针灸。
唐军昼夜不停地堆筑土山,总共用了六十天,劳力五十万人,山顶离城有几丈,可以向下俯瞰城里的情形。李道宗让果毅都尉傅伏爱率领士兵在山顶驻守,防备高丽兵,结果土山坍塌,压向城墙,城墙塌陷。恰好傅伏爱私自离开营垒,高丽几百名士兵从城墙缺口处出来进攻,夺取了土山,在那儿挖掘沟堑守卫。
太宗大怒,斩杀傅伏爱示众,命令众将领攻城,三天都没攻下。李道宗光着脚到太宗的旗下请罪。太宗说:“你罪当处死,但是朕认为汉武帝杀了大将王恢,不如秦穆公重新任用孟明视,且你有攻破盖牟、辽东的功劳,所以特别赦免你。”
太宗攻不下安市,认为辽东天气寒冷得早,草木枯萎,水面结冰,士兵和马匹难以久留,而且粮食快要吃完,就于十八日下令班师。先让辽东、盖牟二州的百姓渡过辽水,于安市城下炫耀兵力后,率领大军撤退,城中守军都不敢有什么举动。
虽然太宗这次征讨高丽失败了,可是也打下了高丽的很多城池,并且抓了很多俘虏,加入了唐朝户籍的人口有上万人。唐朝士兵战死的不多,但杀死的高丽兵却很多,约有四万人。