The NL Central-leading Brewers (25-18) won their fourth straight and seventh in their last eight as right-hander Paolo Espino made his major league debut and worked four innings but didn't factor in a decision.
Right hander Wily Peralta (5-2) worked the seventh and eighth innings and earned the victory for the Brewers.
Right-handed reliever Carlos Torres faced four batters in a scoreless ninth for his first save.
The Cubs (21-20) fell behind early as right-hander Eddie Butler, making his second Cubs start, gave up two first-inning runs and lasted three-plus innings.
Cubs reliever Mike Montgomery (0-3) worked two middle innings and took the loss.
Brewers catcher Jett Bandy went 2-for-3 with two RBIs and reached base four times.
Butler struggled through a 40-pitch first inning as he walked the bases loaded and gave up a single up the middle to Bandy with two outs that scored Eric Sogard and Eric Thames for a 2-0 Milwaukee lead. Cubs second baseman Ben Zobrist prevented further damage with a diving catch of Keon Broxton's liner for the third out.
The Cubs scored an unearned run in the third inning when Javier Baez reached second base on a Broxton error and came home on Jon Jay's one-out double to right.
Butler departed after Orlando Arcia reached base with a leadoff infield single in the fourth. Arcia eventually advanced to third with two outs, but the Cubs escaped as Montgomery struck out Thames to end the inning.
Butler threw 92 pitches in his three-plus innings of work, allowing two runs on three hits while walking five and striking out a pair.
The Cubs loaded the bases on Espino with none out in the fourth, setting up a two-run single up the middle by Willson Contreras that drove in Anthony Rizzo and Ian Happ for a 3-2 Chicago lead.
Waves of rain arrived in the top of the fifth inning as Milwaukee loaded the bases. The Brewers forced a 3-3 tie as Arcia reached on a two-out RBI infield single that brought home Travis Shaw.
Montgomery then walked pinch hitter Jesus Aguilar to bring home Bandy for a 4-3 lead. Sogard's fly to left finally ended the inning.
Aguilar's at-bat also marked the end of Espino's outing. He allowed three runs (two earned) on five hits and struck out three.
Rain continued through the bottom of the fifth as Brewers reliever Rob Scahill retired three straight Cubs.
Umpires finally stopped the game in the top of the sixth when the Brewers had runners at second and third after left fielder Kyle Schwarber mishandled a wet ball, resulting in a double error.
When play resumed after a 1-hour, 59-minute delay, Domingo Santana singled home Thames and Jonathan Villar off Cubs' reliever Pierce Johnson -- also making his big league debut -- for a 6-3 lead.
NOTES: Brewers 1B Eric Thames was back in the lineup after a bout of strep throat sidelined him for three games this week. ... Manager Craig Counsell said OF Ryan Braun's strained left calf was improving and that a Sunday return from the disabled list was possible. ... Threats of rain forced the cancellation of batting practice, but the Brewers and Cubs still got the start of Friday's afternoon game under way at 1:20 p.m. ... Game time temperature was 46 degrees with a wind chill of 37 thanks to north winds of 18 miles per hours. It was 87 degrees on Tuesday. ... The Brewers send RHP Chase Anderson (2-0, 3.43 ERA) against Cubs RHP Jake Arrieta (4-3, 5.44 ERA) in Saturday's middle game. ... The Cubs gave up two first-inning runs on Friday and have allowed 43 first-inning runs this season, translating into a 9.43 ERA.