簡體   English   中英

在詹金斯管道期間無法將卷安裝到Docker容器

[英]Unable to mount a volume to a docker container during jenkins pipeline

我有一個詹金斯管道來簽出,構建和部署React項目。

pipeline {
    agent {
        docker {
            image 'node:6-alpine'
            args '-v /home/nginx/console:/home/'
            args '-p 3000:3000' 
        }
    }
        environment {
        CI = 'true' 
    }

    stages {
        stage('Install') { 
            steps {
                sh 'touch /tmp/azeiodfsihqznlkdsqjfn'
                sh 'npm install' 
            }
        }
        stage('Test') { 
            steps {
                sh 'npm test' 
            }
        }

        stage('Build') { 
            steps {
                sh 'npm run build' 
            }
        }



        stage('Deploy') {

            steps {
                sh 'ls'
                sh '$(pwd)'
            }
        }

    }
}

我想在/home/nginx/console上掛載目錄為/home/nginx/console容器的/home文件夾。 構建之后,在容器內部,我將dist/*內容移動到/ home以便將其放入/home/nginx/console

但似乎未裝入該卷。 當我在/ home中創建文件時,主機中沒有任何內容。

編輯:在我的控制台日志中,我有:

Checking out Revision 3471c656f032692288de13f357c4b8ba54b16ca4 (refs/remotes/origin/master)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 3471c656f032692288de13f357c4b8ba54b16ca4
Commit message: "Update Jenkinsfile"
 > git rev-list --no-walk c5930fc469fd066720df45cdf466788957cdb0bc # timeout=10
[Pipeline] }
[Pipeline] // stage
[Pipeline] withEnv
[Pipeline] {
[Pipeline] sh
+ docker inspect -f . node:6-alpine
.
[Pipeline] withDockerContainer
Jenkins seems to be running inside container 1ce58d845edf831599312c3d016c418a720891ea17c7bacd8327c48f9c44e9f6
$ docker run -t -d -u 0:0 -p 3000:3000 -w /var/jenkins_home/workspace/gara-developer-console --volumes-from 1ce58d845edf831599312c3d016c418a720891ea17c7bacd8327c48f9c44e9f6 -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** node:6-alpine cat
$ docker top 2fe2bdef3f475373cf85dfd452b6bbda21bc02dc308458ffff061b0ae9e963ec -eo pid,comm
[Pipeline] {
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Install)
[Pipeline] sh
+ touch /home/azeiodfsihqznlkdsqjfn
[Pipeline] sh
+ npm install

拜托,您知道我該如何糾正嗎?

我認為您需要從掛載的/home/路徑中刪除結尾的斜杠,因為目前我希望您的掛載-v /home/nginx/console:/home/創建掛載/home/console

因此,要么將文件寫入容器內的/home/console ,要么將您的mount語句更新為:

args '-v /home/nginx/console:/home'

您不需要在這里做任何事情(尤其是應該能夠刪除args '-v ...'行)。 Jenkins會自行將工作空間目錄以與主機相同的路徑安裝到Docker容器中。

在您進入Deploy階段時,已構建的內容位於主機和容器內部的Jenkins工作空間目錄中。 如果您正在生產系統上運行Jenkins(考慮移動它!),而“部署”操作實際上只是復制到另一個主機目錄中,則可以為該步驟聲明一個備用agent 我會嘗試使管道看起來像

stage('Deploy') {
  agent { any }
  steps {
    ...
  }
}

(實際上,我可能會將其反轉,僅在Docker中運行npm步驟,默認情況下不在Docker中運行。)

正如@Matt在評論中所說,解決方案是只使用一個命令

您的第二個參數將覆蓋第一個。 將它們與args結合

'-v /home/nginx/console:/home/ -p 3000:3000'

暫無
暫無

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

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