City were far from their sparkling best against a well-organised Shakhtar side but the hard work was done in the earlier games with the Blues comfortably clear at the top of Group C.
The game almost came to life in unfortunate circumstances 15 minutes when Ederson misjudged a clearance outside of his box completely, allowing Tete an angled run towards goal– but Fernandinho managed to prevent a certain goal as he slid to clear the danger.
Indeed the visitors had a number of half chances as they continually used the tactic of the long pass towards the nippy Tete on the right flank.
The Blues, meanwhile, were far from their sparkling best with too many passes falling short or crosses not beating the first man.
Nicolas Otamendi had a header and a long-range shot go close and Rodri fired a 20-yard drive at the keeper, but other than that, the visitors looked the more likely to open the scoring.
City tried to up the ante after the break against a well-disciplined Shakhtar side and those efforts were rewarded on 57 minutes.
Kevin De Bruyne moved forward with purpose before picking out Gabriel Jesus who, when he found his path blocked, managed to poke the ball back to Ilkay Gundogan who passed the ball into the bottom left-hand corner to finally break the deadlock.
Shakhtar, however, were far from finished and on 69 minutes levelled with their first real attack of the half as Dodo sent in low cross that Manor Solomon drilled home from eight yards to make it 1-1.
David Silva immediately went close to restoring the Blues’ lead as Jesus worked his way into the box before setting up David Silva who saw his scuffed shot cleared off the line.
There were other half-chances in the time that remained but the Ukrainian champions again proved that there are no easy games in Europe's premier club competition.
Blues progress with a game to spare
Star man: Kevin De Bruyne
"I'm delighted to be in the next round. We qualify and we played well in the second half. The second half was better than the first. We conceded only a few counter attacks.
"Tottenham have gone through again and maybe in the next draw all the four English sides will be there
"I've played against Shakhtar Donetsk many times and they always have quality players. In general, we created chances but the draw was enough in the end."
How we lined up:
Ederson, Cancelo, Angelino, Otamendi, Fernandinho, Rodrigo (Foden 75), Gundogan, De Bruyne (D Silva 70), Sterling, Bernardo, Jesus
Subs: Carson, Walker, Stones, Mendy, Mahrez
What it means…
With Atalanta beating Dinamo Zagreb 2-0, this point means City cannot be caught at the top of Group C and progress as group winners.
City have back-to-back away games coming up with a trip to St James’ Park on Saturday to face Steve Bruce’s Newcastle United (12.30pm kick-off) and then it’s off to Turf Moor to face Burnley the following Tuesday evening.