我正在尝试配置一个简单的Jenkinsfile管道,从github获取新的提交,然后从jenkins-cloned repo中部署一个更新的index.html到apache的/public_html文件夹。体系结构如下:
- 运行jenkins的Docker容器; jenkins由jenkins组中的默认jenkins用户运行 *
- 托管在lubuntu虚拟机上的Docker,该虚拟机还在www-data组中安装了apache作为默认root用户 *
- 我通过以下方式将(我的)host_user添加到www-data:sudo usermod -a -G www-data hostuser*
- 我通过以下方式将public_html设置为rwx rwx r x:© 2019 www.sudochmod775.com版权所有
- 我在容器和主机之间设置ssh(容器存储私钥;作为jenkins用户在容器中生成;并且主机将公钥存储在其.ssh/authorized_keys文件中 *
结果:
1.* lubuntu主机中的host_user可以cp文件到public_html*
1.* Docker容器中的jenkins用户可以将文件scp到例如/home/hostuser/*
1.* 虽然jenkins构建成功,但在尝试让jenkins用户scp到public-html文件夹时,我得到 '权限被拒绝'。*
有什么想法吗
- 我尝试添加一个名为jenkins的新用户到apache的www-data组,但不仅没有工作,我假设这不是被视为在docker容器中的同一个实际用户?
- 我还假设chmod 777到public_html不是一个理想的?
我的jenkinsfile是这样写的:
pipeline{
agent any
stages {
stage("build") {
steps {
script {
try {
// SSH copy index.html from the jenkins-cloned repo in the docker container, to the docker host:
sh 'scp index.html hostuser@[host_ip]:/var/www/tutorialJenkins_test/public_html'
} catch (err) {
echo "File copy to localhost failed: ${err}"
// handle exception..
} finally {
echo "Build stage complete.."
}
}
}
}
}
}
1条答案
按热度按时间busg9geu1#
对目录的777权限意味着每个人都可以访问读/写/执行(对目录执行意味着你可以对目录执行ls)。755意味着每个人都可以读取和执行,并且文件的所有者也可以写入。阅读你的问题后...我可以从三个方面帮助你。
1.简单地给予777(但哈哈,我认为你不想要这个)
1.我的第二种方式:让Jenkins成为那条路的主人第755章可以动了
1.这是我能给予你的最好的答案:但是我假设你的Jenkins有sudo访问权限。如果没有,那么你必须给予Jenkins一个sudo访问权限。看,如果你正在阅读这篇文章,那么你不想每次都给予777,也不想每次都让Jenkins成为所有者。
(As你说“jenkins用户在docker容器中可以scp一个文件到例如/home/hostuser/”)你可以做的是-->直到Jenkins可以复制... scp吧,然后在Jenkins的pom文件中写一个shell命令来运行文件
在shell文件中
1.首先使用sudo或更改所有者(任何一个)将权限更改为777
1.移动文件
1.还原权限/所有者的更改
喜欢
或
这样你就可以更改权限>移动,然后>恢复权限。