蜀建兴六年(228)冬,曹休军在石亭(今安徽潜山东北)被陆逊军击败。十二月,诸葛亮趁机率军北上,出散关(今陕西宝鸡西南),包围陈仓(今宝鸡东)。陈仓地势险要,易守难攻,曹真事先已派郝昭守备。诸葛亮两次派人至城下劝降郝昭,都被严辞拒绝。诸葛亮自认为城内的几千军敌不住自己的数万人,再加上魏援军未到,便进兵攻城。蜀用云梯、冲车攻城不克,又挖地道、填沟堑亦被魏军瓦解。昼夜激战二十余天,蜀军难以取胜。此时,魏派将军费耀、名将张郃引兵救陈仓,蜀军的粮食也发生困难,诸葛亮又只好退回汉中。退师途中,诸葛亮用伏兵杀死前来追赶的魏将王双。
建兴七年(229)春,诸葛亮派大将陈式攻打武都(今甘肃成县)、阴平(今甘肃文县西北)二郡,发起第三次北伐。诸葛亮自己带兵至建威(今甘肃成县西北)。魏将郭淮领兵救援,被击败,蜀军占领二郡。诸葛亮对当地的氐、羌等少数民族进行安抚,然后留下将兵据守,自己率军回汉中。因夺取魏二郡有功,刘禅复拜诸葛亮为丞相。