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.
In the end the 1-1 draw was enough to complete the job that began back in September.