Steps are the most fundamental part of the pipeline. They define the operations that are executed, so they actually tell Jenkins what to do.
- sh: This executes the shell command; actually, it's possible to define almost any operation using sh
- custom: Jenkins offers a lot of operations that can be used as steps (for example, echo); many of them are simply wrappers over the sh command used for convenience; plugins can also define their own operations
- script: This executes a block of the Groovy-based code that can be used for some non-trivial scenarios, where flow control is needed
Notice that the pipeline syntax is very generic ...