簡體   English   中英

如何在 Jenkins 聲明性管道中將人工制品從一個代理復制到另一個代理?

[英]How to copy an artefact from one agent to another in a Jenkins declarative pipeline?

我想使用 Jenkins 聲明式管道和代理語法來構建我想要部署到側車容器的人工制品,如以下偽代碼所示:

pipeline {
    agent none 
    stages {
        stage('Build Artefact') {
            agent { docker 'build-agent' } 
            steps {
                < I want to create the artefact to deploy to a side car container here >
            }
        }
        stage('Deploy Artefact') {
            agent { docker 'side-car' } 
            steps {
                < I want to deploy the artefact created in the previous stage here >
            }
        }
    }
}

我正在努力解決的問題是如何將文件從“Build Artefact”階段使用的容器傳遞到“Deploy Artefact”中使用的容器,據我所知, stash不會跨容器工作,除非有人否則有經驗。

根據 Jenkins 文檔,您可以使用 args 參數為聲明性管道語法指定卷:

pipeline {
    agent {
        docker {
            image 'maven:3-alpine'
            args '-v $HOME/.m2:/root/.m2'
        }
    }
    stages {
        stage('Build') {
            steps {
                sh 'mvn -B'
            }
        }
    }
}

但是,我想知道是否有更優雅的解決方案不涉及傳遞卷。

如果工件不太大,您可以使用stash指令在不同容器中的階段之間傳遞一些文件。

pipeline {
    agent none 
    stages {
        stage('Build Artefact') {
            agent { docker 'build-agent' } 
            steps {
                sh 'make'
                stash includes: 'myartefact', name: 'ARTEFACT'
            }
        }
        stage('Deploy Artefact') {
            agent { docker 'side-car' } 
            steps {
                unstash 'ARTEFACT'
                sh 'deploy.sh'
            }
        }
    }
}

有關完整詳細信息,請參閱存儲文檔

當您使用“docker run”時,您可以使用 -v 參數將邏輯 docker 卷映射到您的物理 jenkins 目錄(例如自己的作業工作區)。

這里更詳細:

https://damnhandy.com/2016/03/06/creating-containerized-build-environments-with-the-jenkins-pipeline-plugin-and-docker-well-almost/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM