所以,我有一个完全在Docker容器内构建的管道作业。使用的Docker镜像在构建之前从本地存储库中提取,并且几乎具有运行我的项目所需的所有依赖项。
问题是我需要一个选项来定义卷以将mound从Host绑定到容器,以便我可以使用Host系统上可用的工具执行某些分析,但不能在容器中执行。
有没有办法在Jenkinsfile(管道脚本)中执行此操作?
答案 0 :(得分:0)
假设您在Linux下,请运行以下代码
docker run -it --rm -v /local_dir:/image_root_dir/mount_dir image_name
以下是一些细节: -it:交互式终端 --rm:退出容器后删除容器 -v:volume或者说将本地目录挂载到卷。
由于挂载功能将覆盖'在您的映像目录中,您应始终在映像根目录下创建一个新目录。
访问Use bind mounts以获取更多信息。
PS:
运行
sudo -s
在运行docker之前输入密码,这样可以节省大量时间,因为您不必在 docker 前面输入 sudo 你运行码头工作的时间。
ps2:
假设您的图像名称较长且图像ID为5ed6274db6ce,则可以至少运行前三位数或更多
docker run [options] 5ed
如果您有更多图像具有相同的前三位数,则可以使用四个或更多。 例如,您有以下两个图像
REPOSITORY IMAGE ID
My_Image_with_very_long_name 5ed6274db6ce
My_Image_with_very_long_name2 5edc819f315e
你可以简单地运行
docker run [options] 5ed6
运行图像My_Image_with_very_long_name。
答案 1 :(得分:0)
我不清楚这是不是你的意思。但如果不是。让我知道,我会试着弄清楚。
我对从主机到容器的安装的理解是将Jenkins工作区的内容安装在容器内。
例如在这个管道中:
pipeline {
agent { node { label 'xxx' } }
options {
buildDiscarder(logRotator(numToKeepStr: '3', artifactNumToKeepStr: '1'))
}
stages {
stage('add file') {
steps {
sh 'touch myfile.txt'
sh 'ls'
}
}
stage('Deploy') {
agent {
docker {
image 'lvthillo/aws-cli'
args '-v $WORKSPACE:/project'
reuseNode true
}
}
steps {
sh 'ls'
sh 'aws --version'
}
}
}
post {
always {
cleanWs()
}
}
}
在第一阶段,我只是将一个文件添加到工作区。只是在詹金斯。 Docker没什么。
在第二阶段,我启动一个包含aws CLI的docker容器(这不是安装在我们的jenkins slave上)。我们将启动容器并将工作区安装在容器的/project
文件夹中。现在我可以执行AWS CLI命令了,我可以访问文本文件。在下一个阶段(不在管道中),您可以在另一个容器或jenkins slave本身中再次使用该文件。
输出:
[Pipeline] {
[Pipeline] stage
[Pipeline] { (add file)
[Pipeline] sh
[test] Running shell script
+ touch myfile.txt
[Pipeline] sh
[test] Running shell script
+ ls
myfile.txt
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Deploy)
[Pipeline] getContext
[Pipeline] sh
[test] Running shell script
+ docker inspect -f . lvthillo/aws-cli
.
[Pipeline] withDockerContainer
FJ Arch Slave 7 does not seem to be running inside a container
$ docker run -t -d -u 201:201 -v $WORKSPACE:/project -w ... lvthillo/aws-cli cat
$ docker top xx -eo pid,comm
[Pipeline] {
[Pipeline] sh
[test] Running shell script
+ ls
myfile.txt
[Pipeline] sh
[test] Running shell script
+ aws --version
aws-cli/1.14.57 Python/2.7.14 Linux/4.9.78-1-lts botocore/1.9.10
[Pipeline] }
$ docker stop --time=1 3652bf94e933cbc888def1eeaf89e1cf24554408f9e4421fabfd660012a53365
$ docker rm -f 3652bf94e933cbc888def1eeaf89e1cf24554408f9e4421fabfd660012a53365
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] cleanWs
[WS-CLEANUP] Deleting project workspace...[WS-CLEANUP] done
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
在您的情况下,您可以将数据装入容器中。执行这些操作,稍后您可以对jenkins slave本身的代码进行分析(无需docker)