尝试从jenkins docker容器SCP到apache主机时权限被拒绝

nbewdwxp  于 2023-05-22  发布在  Jenkins
关注(0)|答案(1)|浏览(179)

我正在尝试配置一个简单的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.."
                            }
                    }
            }
        }
    }
}
busg9geu

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命令来运行文件

stages {
        stage('Build') {
            steps {
                // Execute the shell script
                sh './test.sh'

            }
        }
    }

在shell文件中
1.首先使用sudo或更改所有者(任何一个)将权限更改为777
1.移动文件
1.还原权限/所有者的更改
喜欢

sudo chmod -R 777 dirPath
sudo mv folder dirPath
sudo chmod -R 775 dirPath

sudo chown -R newUser:newGroup dirPath
sudo mv folder dirPath
sudo chown -R oldUser:oldGroup dirPath

这样你就可以更改权限>移动,然后>恢复权限。

相关问题