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)"'
}
}
}
}
我正在尝试在 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)"'
}
}
}
}