[英]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.