title: What is the difference between a node, stage, and step in Jenkins pipelines?
body: <p>I'm trying to understand how to structure my Jenkins 2.7 pipeline groovy script.  I've read through the <a href="https://github.com/jenkinsci/pipeline-plugin/blob/master/TUTORIAL.md" rel="noreferrer">pipeline tutorial</a>, but feel that it could expand more on these topics.</p>
  
  <p>I can understand that a pipeline can have many <code>stage</code>s and each <code>stage</code> can have many <code>step</code>s.  But what is the difference between a <code>step();</code> and a method call inside a <code>stage</code>, say <code>sh([script: "echo hello"]);</code>.  Should <code>node</code>s be inside or outside of <code>stage</code>s?  Should the overall properties of a job be inside or outside a <code>node</code>?</p>
  
  <p>Here is my current structure on an ubuntu master node:</p>
  
  <pre><code>#!/usr/bin/env groovy
  
  node('master') {
      properties([
          [$class: 'BuildDiscarderProperty', strategy: [$class: 'LogRotator', numToKeepStr: '10']]
      ]);
  
      stage 'Checkout'
          checkout scm
  
      stage 'Build'
          sh([script: "make build"]);
  
      archive("bin/*");
  }
  </code></pre>