Gun shooting repeatedly in cycles?
Short answer: yes.

Your best bet is to start by creating an animation for firing once.  

Then for things like the muzzle flash you can loop that animation (either using multiple strips in the NLA, or a cycles modifier on the fcurves of its animation).

For the bullets, you probably want multiple objects in case multiple bullets are in-camera.  They can share an animation that is shifted in time using NLA strips.

The casings will be similar to the bullet: having multiple objects that share an animation using NLA strips displaced in time.

(edit:)

Keyframing the hide_render property (the camera icon in the outliner) is a popular technique for making something appear/disappear (bullets, shell casings, although you could also conceal them inside the gun's polygons where the camera can't see them)