Jenkins + Docker 更改工作区布局

Jenkins + Docker Change workspace layout

我正在尝试在 jenkins 服务器上设置 yocto 构建作业。我 运行 遇到一个问题,我需要一个将存储库内容克隆到的特定文件夹布局。 jenkins 本身是 运行 作为一个 docker 容器,连接到“外部”docker 套接字以启动和启动容器。此外,我需要在运行之间缓存构建目录(> 20GB),否则这将在运行之间花费很长时间。

我尝试了以下 Jenkinsfile 来查看 jenkins 使用的布局:

pipeline {
    agent {
        docker {
            image 'XXXXXX/yocto:latest'
            args '-v $HOME/yocto:/home/yocto'
        }
    }
    stages {
        stage('Build') {
            steps {
                sh 'ls'
                sh 'echo "$(pwd)"'
            }
        }
    }
}

这会产生以下输出:

+ls
<contents of the repository>
+pwd
/var/jenkins_home/workspace/XXXXX-yocto_master

如何让我的 bootstrap 脚本工作(我不能轻易改变,因为很多其他人都依赖它)我需要以下文件夹布局:

/var/jenkins_home/workspace/XXXXXX-yocto_master
└── new_reposiotry_name
    └── <repository contents>

如何指示 Jenkins 管道不将存储库的内容克隆到工作区中,而是将其放入文件夹中?我知道这可以通过移动文件来完成,但如果有其他方法可以做到这一点,我会尽量避免它。

简单的方法可能是使用选项 checkoutToSubdirectory('myRepoDir')

pipeline {
    options{
        checkoutToSubdirectory('myRepoDir')
    }
    agent {
        docker {
            image 'XXXXXX/yocto:latest'
            args '-v $HOME/yocto:/home/yocto'
        }
    }
    stages {
        stage('Build') {
            steps {
                sh 'ls'
                sh 'echo "$(pwd)"'
            }
        }
    }
}


或者,您可以将其作为管道步骤并使用 skipDefaultCheckout() 选项忽略默认 git 签出。

pipeline {
    options{
        skipDefaultCheckout()
    }
    agent {
        docker {
            image 'XXXXXX/yocto:latest'
            args '-v $HOME/yocto:/home/yocto'
        }
    }
    stages {
        stage('Checkout SCM'){
            steps{
                 dir('myRepoDir'){
                     git branch: 'master', credentialsId: 'your-credential', url: 'your-repo'
                 }
            }
        }
        stage('Build') {
            steps {
                sh 'ls'
                sh 'echo "$(pwd)"'
            }
        }
    }
}