Implement JJB, add backup script for jenkins

PROD-34544
Change-Id: Ie4d31934582169ae18cbaa56dd21c141ce49712b
diff --git a/jobs/templates/download-config-drive.yml b/jobs/templates/download-config-drive.yml
new file mode 100644
index 0000000..8e8fc90
--- /dev/null
+++ b/jobs/templates/download-config-drive.yml
@@ -0,0 +1,117 @@
+- job-template:
+    project-type: pipeline
+    description: '{job-description}'
+    sandbox: true
+    concurrent: true
+    disabled: false
+    dsl: |2-
+
+
+      def image_sha = null
+      def image_md5 = null
+      def image_name = null
+      def image_size = null
+      def storage_path = '/home/jenkins/images'
+      def node_name = "${{NODE_NAME}}"
+      def DOWNLOAD_FLAG = true
+
+      node(node_name) {{
+
+      stage("Clean Workspace") {{
+      step([$class: 'WsCleanup'])
+      }}
+
+      stage("Check already exist file") {{
+      try {{
+      def file_name = "${{IMAGE_URL}}".split('/').last()
+      sh "[ -f ${{storage_path}}/${{file_name}} ]"
+      echo "We have already downloaded the image ${{IMAGE_URL}} in ${{storage_path}}"
+      DOWNLOAD_FLAG = false
+      currentBuild.result = 'NOT_BUILT'
+      }} catch (e) {{
+      echo "We don't have an image, need to download"
+      DOWNLOAD_FLAG = true
+      }}
+      }}
+
+      stage("Download image") {{
+      if (DOWNLOAD_FLAG) {{
+      sh "wget --progress=dot:giga ${{IMAGE_URL}}"
+      image_name = sh(returnStdout: true, script: "basename ${{IMAGE_URL}}").trim()
+      image_size = sh(returnStdout: true, script: "stat --printf='%s' ${{image_name}}").trim()
+      }} else {{
+      echo "Skip due to DOWNLOAD_FLAG ins't true"
+      }}
+
+      }}
+
+      stage("Calculate sha") {{
+      if (DOWNLOAD_FLAG) {{
+      image_sha = sh(returnStdout: true, script: "sha256sum ${{image_name}} | cut -d ' ' -f 1").trim()
+      image_md5 = sh(returnStdout: true, script: "md5sum ${{image_name}} | cut -d ' ' -f 1").trim()
+      }} else {{
+      echo "Skip due to DOWNLOAD_FLAG ins't true"
+      }}
+      }}
+
+      stage("Save in home") {{
+      if (DOWNLOAD_FLAG) {{
+      // sh "mv ${{image_name}} ${{image_name}}-${{image_md5}}"
+      // sh "mv ${{image_name}}-${{image_md5}} ${{storage_path}}/"
+      sh "mv ${{image_name}} ${{storage_path}}/"
+      }} else {{
+      echo "Skip due to DOWNLOAD_FLAG ins't true"
+      }}
+      }}
+
+      stage("Create source file") {{
+      if (DOWNLOAD_FLAG) {{
+      sh """
+      touch image_data.txt
+      echo IMAGE_URL=${{IMAGE_URL}} >> image_data.txt
+      echo IMAGE_SHA256=${{image_sha}} >> image_data.txt
+      echo IMAGE_MD5=${{image_md5}} >> image_data.txt
+      echo IMAGE_NAME=\$(basename ${{IMAGE_URL}}) >> image_data.txt
+      echo IMAGE_PATH=${{storage_path}}/${{image_name}} >> image_data.txt
+      echo IMAGE_DOWNLOADED=\$(date +%Y%m%d%H%M%S) >> image_data.txt
+      """
+      sh """
+      touch image_data.json
+      cat << EOM > image_data.json
+      {{
+      "IMAGE_URL": "${{IMAGE_URL}}",
+      "IMAGE_SHA256": "${{image_sha}}",
+      "IMAGE_MD5": "${{image_md5}}",
+      "IMAGE_NAME": "\$(basename ${{IMAGE_URL}})",
+      "IMAGE_PATH": "${{storage_path}}/${{image_name}}",
+      "IMAGE_DOWNLOADED": "\$(date +%Y%m%d%H%M%S)"
+      }}
+      EOM
+      """
+      }} else {{
+      echo "Skip due to DOWNLOAD_FLAG ins't true"
+      }}
+
+      }}
+
+      stage("Save artifacts") {{
+      if (DOWNLOAD_FLAG) {{
+      archiveArtifacts allowEmptyArchive: false,
+      artifacts: "image_data.*"
+      }} else {{
+      echo "Skip due to DOWNLOAD_FLAG ins't true"
+      }}
+      }}
+
+      }}
+    name: download-config-drive
+    parameters:
+    - string:
+        default: ''
+        description: ''
+        name: IMAGE_URL
+    - string:
+        default: offline-deploy
+        description: ''
+        name: NODE_NAME
+