Donnelly was born in Belfast. He made his Cliftonville debut on 7 September 2010, coming on as an 85th-minute substitute in a 2–0 defeat against Linfield at Windsor Park in the County Antrim Shield. He went on to make 33 league and cup appearances in the 2010–11 season, scoring 7 league goals. The 2011–12 season started well for Donnelly. In October 2011 he scored a hat-trick in a 6–2 win over Linfield in the County Antrim Shield, the same opposition in the same competition as his debut a year earlier. In November 2011 he scored four goals in a league match against Ballymena United in a 7–3 win to catch the eye of an unnamed Championship club. His good form. continued, and he scored 13 goals in his first 18 league games of the 2011–12 season to attract interest from Arsenal and Liverpool, with the latter club's manager, Kenny Dalglish, confirming they had registered their interest. Donnelly made his final appearance for Cliftonville on 17 December 2011, in a 2–1 home defeat against Coleraine. He had scored a total of 22 goals in 54 league and cup appearances spanning two seasons.
In December 2011, Swansea City offered £100,000 for Donnelly, before Everton bid "considerably more". The Welsh club then upped their bid and Donnelly agreed a three-and-a-half-year deal with Swansea on 30 December 2011 for an undisclosed fee. The transfer was completed on 10 January 2012, and Donnelly was given the shirt number 41. Donnelly scored on his debut for the reserves in a 2–2 draw with Chelsea reserves at Parc-y-scarlets on 28 March 2012. Donnelly made his first senior appearance for Swansea in a League Cup fixture against Crawley Town on 25 September 2012, coming on as a substitute for Michu. His full début came the next season in a Europa League play-off against Petrolul Ploiești which ended in a 2–1 defeat. On 28 May 2015 Swansea City confirmed that Donnelly had been released by the club.
On 31 January 2014, Donnelly joined Coventry City on loan until the end of the 2013–14 season. On 4 February 2014, it was confirmed that Donnelly had returned to Swansea City due to non-footballing personal reasons.
Donnelly joined Gillingham on a free transfer in 2015. On 28 April 2017, the club announced that he had "been suspended from his employment at the club with immediate effect". On 15 May, it was confirmed that he had been fined £700 after being caught driving without a full licence. Five days later, the club announced that Donnelly had been released at the end of his contract.
Return to Cliftonville
On 29 August 2017, Donnelly returned to Cliftonville signing a three-year contract.
Glentoran
On 31 January 2020, Donnelly joined East Belfast side Glentoran, signing a three-and-a-half-year contract. He made his debut for the side in a 0–0 draw against Carrick Rangers in the NIFL Premiership on 14 February 2020. Donnelly started the match as Glentoran defeated Ballymena United 2–1 in the final of the 2019–20 Irish Cup. The game was the first football match in the United Kingdom to host fans since the COVID-19 outbreak, with 250 fans from each team permitted at Windsor Park.
International career
In November 2011, he was called up to the Northern Ireland Under-21sfor the first time, but he did not feature in the match against Serbia. In June 2013, Donnelly informed the IFA that he did not wish to be considered for selection for Northern Ireland. However, he then made his under-21 debut against Denmark in September 2013