I fixed this issue. It was a permission issue on the server-side.
The folder had the correct permissions set, but it seemed the files had a different owner (me, instead of the CCNet service account). This mismatch happened when I manually deployed the files on the server, bypassing CCNET. Since then, the files could be overwritten by the CCNet service account because of its limited privileges. I deleted the files (as the admin user) and forced a new build. It now works as expected.
