Jenkins docker在阶段完成后删除生成的文件

如何解决Jenkins docker在阶段完成后删除生成的文件

我正在构建一个jenkins管道,试图将zeeplin / jupyter笔记本jsons转换为md文件。我需要安装nb2md才能将json转换为md文件,因此我将docker image用于转换文件的阶段之一,但是一旦该阶段完成,docker就会删除所有文件。我想拿这个文件并在下一阶段提交到git,因为文件不见了,我无法做到这一点。我也将docker的git commit步骤移到了docker,但是后来我在docker上找不到git。以下是我的詹金斯文件:

void setBuildStatus(String message,String state) {
  step([
      $class: "GitHubCommitStatusSetter",reposSource: [$class: "ManuallyEnteredRepositorySource",url: “$git_url”],contextSource: [$class: "ManuallyEnteredCommitContextSource",context: "ci/jenkins/build-status"],errorHandlers: [[$class: "ChangingBuildStatusErrorHandler",result: "UNSTABLE"]],statusResultSource: [ $class: "ConditionalStatusResultSource",results: [[$class: "AnyBuildResult",message: message,state: state]] ]
  ]);
}
pipeline {
    agent none
    environment {
        PATH = '/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin'
    }
    parameters {
        string(name: 'files_list',defaultValue: '')
    }
    stages {
       stage('Convert Zeppelin/Jupyter json to md files'){
           agent {
              docker {
                image 'python:3-alpine'
                args  '--network=host'
                }
            }
            steps {
                withEnv(["HOME=${env.WORKSPACE}"]) {
                    sh '''pip3 install --target=/home/jenkins/workspace -U nb2md'''
                }
                withCredentials([
                  sshUserPrivateKey(
                    credentialsId: "github-sec-dms-dataops-ssh-key",keyFileVariable: 'keyfile')
            ]){
                sh'''
                #!/bin/bash
                dir=$(pwd)
                sh $dir/jupyter-zeppelin-json-to-md-files.sh
            '''
            }
          }
        }
        stage ('Git commit'){
            agent any
            steps {
             withCredentials([
                  sshUserPrivateKey(
                    credentialsId: "github-sec-dms-dataops-ssh-key",keyFileVariable: 'keyfile')
            ]){
                sh '''
                #!/bin/sh
                 eval `ssh-agent -s`
                 ssh-add $keyfile
                 git config --global user.email “user_id”
                 git config --global user.name "git"
                 git add .
                 echo "Committing files to git hub ... "
                 git commit -am "Committing markdown files.."
                 echo "Pushing code to github ..."
                 git push -u origin HEAD
                 git diff --exit-code'
                 '''}
           }
        }
    }
    post {
        success {
            node('jnlp') {
                setBuildStatus("Build succeeded","SUCCESS");
            }
        }
        failure {
            node('jnlp') {
                setBuildStatus("Build failed","FAILURE");
            }
        }
    }
}


如何将第一阶段生成的文件用于第二阶段?

解决方法

使用archiveArtifacts在步骤之间保留文件。在docker步骤上使用args安装主机文件夹。

docker {
    image 'python:3-alpine'
    args  '--network=host -v <host_folder>:<container_folder>'
}

post {
    always {
        archiveArtifacts artifacts: 'generatedFile.txt',onlyIfSuccessful: true
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?