{"id":49348,"date":"2025-05-18T16:31:48","date_gmt":"2025-05-18T16:31:48","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=49348"},"modified":"2026-02-21T07:28:29","modified_gmt":"2026-02-21T07:28:29","slug":"rundeck-basic-workflow-step-by-step","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/rundeck-basic-workflow-step-by-step\/","title":{"rendered":"Rundeck Basic Workflow: Step-by-Step"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/05\/ChatGPT-Image-May-18-2025-09_57_07-PM.png\" alt=\"\" class=\"wp-image-49349\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/05\/ChatGPT-Image-May-18-2025-09_57_07-PM.png 1024w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/05\/ChatGPT-Image-May-18-2025-09_57_07-PM-300x300.png 300w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/05\/ChatGPT-Image-May-18-2025-09_57_07-PM-150x150.png 150w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/05\/ChatGPT-Image-May-18-2025-09_57_07-PM-768x768.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/05\/ChatGPT-Image-May-18-2025-09_57_07-PM-250x250.png 250w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/05\/ChatGPT-Image-May-18-2025-09_57_07-PM-80x80.png 80w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Here&#8217;s a clear explanation of the <strong>Rundeck Basic Workflow<\/strong>, perfect for beginners or teams implementing Rundeck for the first time.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd04 <strong>Rundeck Basic Workflow: Step-by-Step<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"683\" height=\"1024\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/05\/ChatGPT-Image-May-18-2025-10_00_57-PM-683x1024.png\" alt=\"\" class=\"wp-image-49350\" srcset=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/05\/ChatGPT-Image-May-18-2025-10_00_57-PM-683x1024.png 683w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/05\/ChatGPT-Image-May-18-2025-10_00_57-PM-200x300.png 200w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/05\/ChatGPT-Image-May-18-2025-10_00_57-PM-768x1152.png 768w, https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/05\/ChatGPT-Image-May-18-2025-10_00_57-PM.png 1024w\" sizes=\"auto, (max-width: 683px) 100vw, 683px\" \/><\/figure>\n\n\n\n<p>This describes the standard flow from job creation to execution and logging.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccb 1. <strong>Create a Project<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A <strong>Project<\/strong> is the top-level container in Rundeck.<\/li>\n\n\n\n<li>Each project holds:\n<ul class=\"wp-block-list\">\n<li>Jobs<\/li>\n\n\n\n<li>Node definitions<\/li>\n\n\n\n<li>ACL policies<\/li>\n\n\n\n<li>Plugins\/configuration<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">rd projects create --project my-project\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udee0\ufe0f 2. <strong>Define Nodes (Targets)<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Nodes are the machines or environments where jobs will run.<\/li>\n\n\n\n<li>Methods:\n<ul class=\"wp-block-list\">\n<li>Static file (<code>resources.xml<\/code> or YAML)<\/li>\n\n\n\n<li>Cloud-based discovery (AWS, Azure, Kubernetes, etc.)<\/li>\n\n\n\n<li>Script-based plugin<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">hostname<\/span>: <span class=\"hljs-selector-tag\">web01<\/span><span class=\"hljs-selector-class\">.example<\/span><span class=\"hljs-selector-class\">.com<\/span>\n  <span class=\"hljs-selector-tag\">username<\/span>: <span class=\"hljs-selector-tag\">ubuntu<\/span>\n  <span class=\"hljs-selector-tag\">tags<\/span>: <span class=\"hljs-selector-tag\">web<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\uddf1 3. <strong>Create a Job<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Jobs are defined using:\n<ul class=\"wp-block-list\">\n<li>GUI<\/li>\n\n\n\n<li>YAML\/XML<\/li>\n\n\n\n<li>REST API<\/li>\n\n\n\n<li>Rundeck CLI (<code>rd jobs<\/code>)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Jobs contain:\n<ul class=\"wp-block-list\">\n<li><strong>Steps<\/strong> (commands\/scripts)<\/li>\n\n\n\n<li><strong>Node filters<\/strong><\/li>\n\n\n\n<li><strong>Options (parameters)<\/strong><\/li>\n\n\n\n<li><strong>Notifications<\/strong><\/li>\n\n\n\n<li><strong>Scheduling (cron)<\/strong><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd27 4. <strong>Configure Workflow<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Define one or more <strong>Steps<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Inline shell script<\/li>\n\n\n\n<li>External scripts<\/li>\n\n\n\n<li>Ansible\/Terraform\/kubectl<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Choose execution type:\n<ul class=\"wp-block-list\">\n<li><strong>Sequential<\/strong><\/li>\n\n\n\n<li><strong>Parallel<\/strong><\/li>\n\n\n\n<li><strong>Node-first<\/strong> vs. <strong>Step-first<\/strong><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\u23f0 5. <strong>Schedule or Trigger the Job<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Manual: via UI or CLI<\/li>\n\n\n\n<li>Scheduled: cron-based<\/li>\n\n\n\n<li>API\/Webhook: from Jenkins, GitHub, or external alerting tools<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">rd run -j <span class=\"hljs-string\">\"backup-job\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\u2699\ufe0f 6. <strong>Execution on Nodes<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Rundeck server connects to nodes (via SSH, WinRM, plugins).<\/li>\n\n\n\n<li>Executes each job step in order.<\/li>\n\n\n\n<li>Context variables and options are passed to scripts.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udcec 7. <strong>Notifications (Optional)<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Send job status to:\n<ul class=\"wp-block-list\">\n<li>Email<\/li>\n\n\n\n<li>Slack<\/li>\n\n\n\n<li>Webhook<\/li>\n\n\n\n<li>PagerDuty<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Configurable per job or globally<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udcdd 8. <strong>Logging and Output<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Each job run is recorded:\n<ul class=\"wp-block-list\">\n<li>Start\/End time<\/li>\n\n\n\n<li>User<\/li>\n\n\n\n<li>Node output logs<\/li>\n\n\n\n<li>Status (SUCCEEDED\/FAILED)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>View logs in UI or export via CLI\/API<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">rd executions follow 12345\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\udde0 Rundeck Basic Workflow Visual Summary:<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-attr\">&#91; Project ]<\/span>\n    \u2193\n<span class=\"hljs-selector-attr\">&#91; Job Definition ]<\/span>\n    \u2193\n<span class=\"hljs-selector-attr\">&#91; Workflow Steps ]<\/span>\n    \u2193\n<span class=\"hljs-selector-attr\">&#91; Node Selection ]<\/span>\n    \u2193\n<span class=\"hljs-selector-attr\">&#91; Job Execution ]<\/span>\n    \u2193\n<span class=\"hljs-selector-attr\">&#91; Notification &amp; Logs ]<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Summary: Why This Matters<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Step<\/th><th>Purpose<\/th><\/tr><\/thead><tbody><tr><td>Project<\/td><td>Organize jobs and configs<\/td><\/tr><tr><td>Nodes<\/td><td>Target environments<\/td><\/tr><tr><td>Job<\/td><td>Defines what will run<\/td><\/tr><tr><td>Workflow<\/td><td>Logic and steps<\/td><\/tr><tr><td>Execution<\/td><td>Actual run time on node<\/td><\/tr><tr><td>Notification<\/td><td>Alerting and visibility<\/td><\/tr><tr><td>Logging<\/td><td>Audit and debugging<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\">\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Here&#8217;s a clear explanation of the Rundeck Basic Workflow, perfect for beginners or teams implementing Rundeck for the first time. \ud83d\udd04 Rundeck Basic Workflow: Step-by-Step This describes the standard flow&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-49348","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49348","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=49348"}],"version-history":[{"count":2,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49348\/revisions"}],"predecessor-version":[{"id":58975,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49348\/revisions\/58975"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=49348"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=49348"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=49348"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}