git - 如何在不克隆它所连接的存储库的情况下触发 Jenkins 构建?

标签 git jenkins gitea

我正在使用 config.xml 文件作为模板动态创建 jenkins 作业。基本上我想要实现的是,当有人推送到存储库时,这将触发 jenkins 中的工作。然后,该作业应该 pull 一个 docker 镜像,创建一个容器并克隆它挂接到其中的存储库。这个想法是为了避免将任何恶意代码下载到我们的服务器。相反,它将被下载到 docker 容器中,在容器中运行可执行文件,然后容器将被删除。
问题是每当有人推送到 git 存储库时,jenkins 作业都会自动克隆存储库。有没有办法保持对 repo 的钩子(Hook)但阻止它克隆?
我们没有使用 jenkins 文件,因为它必须在存储库中,并且任何人都可以修改它,这就是我们从 config.xml 模板创建 jenkins 作业的原因。
我读到 jenkinsfile 中存在选项 skipdefaultcheckout 以停止克隆 repo?是否可以在 config.xml 中进行设置?这是解决我正在尝试做的事情的正确选择吗?

最佳答案

假设: Jenkins 上已经安装了相关的 docker 插件。
安装 ssh-agent插件通过ssh credentials到 docker 容器,用于在 docker 中克隆 repo。
可以使用的 docker 容器中用于 repo checkout 的示例 groovy 代码段。

withDockerContainer(args: '-u root', image: "${image}") {
  sshagent(['jenkins-credentials']) {
    sh "mkdir ~/.ssh/ && echo -e 'Host *\n  StrictHostKeyChecking no' > ~/.ssh/config && cat ~/.ssh/config && ssh-add -l"
    git changelog: false, credentialsId: '<ID>', poll: false, url: "<REPO URL>"
    sh 'echo "repo cloned inside container !!!"'
  }
}

关于git - 如何在不克隆它所连接的存储库的情况下触发 Jenkins 构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64939218/

相关文章:

jenkins - 如何在 Jenkins 管道中获取存储库名称

git - 将 gitea 绑定(bind)到 localhost 地址以进行隧道传输?

Jenkins:每个节点上的一项作业仅运行一个构建

Jenkins API 文档与 phpdox

git - go-git:如何在远程服务器上进行身份验证?

excel - 在 Git 上保存 Excel 文件的版本,以便以后手动协调差异

windows - Windows 版 Git 中的文件名太长

git - 是否可以发送多个 pull 请求来 pull github 提交?

python 脚本执行 git 命令并在 html 页面上显示输出