..

jenkins 在不同的 stage 之间共享文件

在使用 k8s 或者 docker 作为 jenkins 的 slave 的时候,会出现一个问题:两个 stage 可能不再同一个机器,或者不再同一个目录上,stage A 中编译的 dist 文件, stage B 中部署需要用到的时候当前目录无法找到 dist 文件。解决方式是使用 stash 和 unstash

stage("npm build") {
    when {
        branch "dev"
    }
    steps {
        sh  """
            npm run deploy
        """
        stash includes: 'dist/**/*', name:'npm_dist'
    }
}
stage("ansible deploy") {
    when {
        branch "dev"
    }
    agent  {
        docker {
            image "ansible:1.2.11"
        }
    }
    steps {
       unstash 'npm_dist'
       script  {
           if (fileExists('dist.zip')) {
               sh('rm -f  dist.zip')
           }
       }
       zip zipFile: 'dist.zip',archive: false,dir: 'dist'
       sh """
           ansible-playbook ansible-deploy.yml --inventory-file=hosts  -e target=dev --timeout=120
        """
    }
}

使用 stash 将目标文件归档,使用 unstash 文件在被归档的文件下载到当前目录。