贞观十八年(644年)二月,高丽大莫离支渊盖苏文弑君自立,实行铁血统治,又入侵邻国新罗。新罗派出使者向唐太宗求救。唐太宗准备派兵征讨高丽。
谏议大夫褚遂良以前太子谋反对朝廷政局有所影响,不确定因素还没有完全清除,且国家内部经济正值蒸蒸日上之季,还是宜于安稳发展及辽东偏远,劳师动众不划算等理由予以反对。李世民就转而征询李勣的意见。李勣则说:“当年薛延陀进犯,陛下就想要发兵讨伐,因魏徵谏阻而作罢,以致使之直到今日仍为祸患。那时如果采用陛下的策略,挟荡平东突厥的余威,采取雷霆之势,扫灭番帮,使之噤若寒蝉,那北疆早就安宁了。如今高丽作乱,也不过效仿薛延陀而已,欲就地坐大,好在以后抗衡我大唐天朝。如今若不征讨他们,等他们蚕食邻国而得以壮大后,再联起手来,就不是那么好对付了。”李世民听后表示同意,并准备御驾亲征。
为了恫吓薛延陀,李世民还趁薛延陀使者到长安来陈述其可汗夷男一直对突厥(此时为唐太宗培植的亲唐势力)用兵的原因之季,挑明了对他们说自己要出兵去攻打高丽了,问夷男是否敢趟这淌浑水,与高丽联合起来对付唐军。夷男表示愿出兵相助攻打高丽,却被唐太宗拒绝了。毕竟当时薛延陀明面上虽没有与唐朝拉爆关系,但一直很不听唐朝的话,是个很不好确定的因素。唐太宗只需要吓住薛延陀,使之不敢轻举妄动就行了。
十一月,李世民任命刑部尚书张亮为平壤道行军大总管,率水军自莱州渡海攻平壤;李勣为辽东道行军大总管,领步、骑军六万以及兰、河二州的外族降军进攻辽东。张、李两军协力并进。
贞观十九年(645年)二月,李世民亲征高句丽。同月,李勣率所部抵达幽州,与各路唐军会合。
之后,李勣来了个“明修栈道,暗度陈仓”之计,从柳城进军,大张声势,表面上作出要通过怀远镇的假象。暗中却派部队北上直趋甬道,出其不意,进攻高句丽。
四月,李勣从通定渡过辽水(辽河),抵达玄菟。高丽人大为惊骇,各城都闭门自守。
此时,辽东道副大总管、江夏王李道宗及营州都督张俭相继到达。张俭更直趋建安城,大败高句丽军。四月十五日,李勣与李道宗合攻盖牟城(今辽宁抚顺),至二十六日攻陷了盖牟城,俘获百姓两万多口、粮食十多万石。
随后,李勣率军直抵进至辽东城(今辽阳市区辽阳老城东北隅)下。李道宗准备率四千骑兵击闪击高丽四万援军,众将都不认可,唯有李勣同意。但在交战中,因行军总管张君义率先撤退走,致使李道宗初战不利。李道宗收拢残军,登上高处,却发现高丽军阵混乱了,于是又纵兵进击。李勣也引大军助战,大破高句丽军,斩首一千余级。原来,李勣暗中派出了一些小分队,乔装成高丽兵,趁李道宗与高丽援军作战混乱之际混入了敌阵中,再伺机发难。李勣之所以没有向李道宗言明,就是怕过早说破了此计就不灵了。
李勣围攻辽东十二日后,李世民抵达了辽东前线,亲率精兵会师,最终将攻陷了辽东城。
此役,唐军共杀敌一万余人,又俘获高丽军一万多人、百姓四万口。
六月,李勣又转攻白岩城(今辽宁省岫岩)西南,迫使其城主归降。
之后,李勣又参与围攻安市城(今辽宁海城东南营城子)。唐军君臣定计,李世民以身为饵,将高句丽援军诱至安市城东南,然后依山为阵。李勣则早已率一万五千名步、骑兵在西岭布阵。长孙无忌则率骑兵一万一千人从山北穿越峡谷,冲击高句丽军阵后。李世民亲率四千步、骑兵作为预备队,偃旗息鼓,登上南山坐阵指挥。高丽北部耨萨(都督)高延寿中计,在唐军的几面夹击之下大败,高丽军被斩首两万余级。