Combine the flour with the salt, black pepper, thyme, chili powder, and cayenne pepper in a large bowl.
Put the milk and butter in a large saucepan and bring to a boil. When the butter melts, turn heat to low. Add the seasoned flour all at once. Stir vigorously with a wooden spoon until the dough forms a ball. Remove from heat.
Separate the white and yolk from one egg, reserving the yolk for glazing.
Put the dough into a large mixer bowl. Beat at medium speed for one minute. Then beat in one egg and the extra egg white. Beat until completely absorbed into the dough. Then add the remaining 4 eggs, one at a time, waiting each time until the previous egg is completely absorbed. After all 5 eggs (plus the one egg white) have been incorporated, the dough should be smooth and satiny.
Add the Parmesan and Gruyere cheeses, and pepperoni if you are using it. Incorporate thoroughly into the dough.
Use a pastry bag to pipe dough onto 2 ungreased baking sheets. You can also drop dough from a teaspoon. For tiny puffs, mounds should be about 1/2 inch in diameter. From small appetizers, mounds should be 1 inch in diameter. For puffs large enough for filling, mounds should be 1 1/2 inches in diameter. Keep the size of the puffs uniform so they bake properly. Space puffs about 1 inch apart.
Beat the remaining egg yolk with 2 tablespoons of milk to make a glaze. Lightly brush the tops of the puffs with glaze before baking. Sprinkle tops with your Parmesan cheese.
Bake in pre-heated oven for 10 minutes (5 minutes for tiny puffs). Reduce heat to 300 degrees F (150 degrees C). Bake 10 minutes more for tiny puffs; 15 to 20 minutes longer for medium or large puffs, or until puffs are golden brown. Test by removing a puff from the oven and breaking it open. The inside should be baked through. If it is still doughy or wet, bake another 5 minutes.
Remove pans from oven and leave puffs on pans until cool enough to serve.