Rookie sensation Jorge Soler had two doubles in his home debut for the Cubs and Jacob Turner (5-8) won in just his second start for Chicago after being acquired from Miami last month. The right-hander allowed just one run and five hits in 6 1-3 innings.
Hector Rondon pitched the ninth for his 23rd save in 27 chances.
Soler became just the third player in the last 100 years to have at least one extra-base hit in each of his first five games in the majors. Will Middlebrooks did it for the Boston Red Sox in 2012 and Enos Slaughter for the St. Louis Cardinals in 1938.
Jimmy Nelson (2-6), who was called up from the minors to make the start, took the loss.
The Cubs took a 1-0 lead in the second inning as Soler doubled with one out and scored on Castillo's single.
Castillo then extended the advantage to 3-0 in the fourth with a line-drive into the left-field bleachers. It was his 11th homer of the season.
Soler led off the sixth with a double off the wall in right-center field and raced to third when Milwaukee center fielder Gerardo Parra bobbled the ball for an error. Soler was left on third as the next three Cubs batters failed to get the ball out of the infield.
The Brewers finally got on the board against Turner in the seventh as Khris Davis hit the first pitch of the at-bat with one out over the bleachers in left field and onto Waveland Avenue to make it 3-1.
That was all for Turner, but Parra stunned the crowd when he hit the first pitch from reliever Blake Parker into the right-field bleachers to trim the Cubs' lead to one.
Parker, though, retired the next two batters to avoid further damage.
Valbuena's one-out solo shot in the eighth inning provided an insurance run for the Cubs.
Brewers: OF Carlos Gomez was out of the lineup a day after he felt something pop in his left wrist during a swing in Sunday's 15-5 loss at San Francisco. X-Rays taken Sunday were negative, but manager Ron Roenicke said more tests were upcoming. He said the injury had improved overnight and was hopeful that hard-swinging Gomez would only be out a few days.
Cubs: 1B Anthony Rizzo missed his seventh straight game with lower back tightness. "He's still day-to-day, still a little stiff," manager Rick Renteria said. "If it doesn't clear up (soon), maybe we get an MRI."