gpt4 book ai didi

docker - 如何使用 Jenkins 声明式管道在远程 Docker 服务器上构建?

转载 作者:行者123 更新时间:2023-12-04 12:38:56 27 4
gpt4 key购买 nike

我在 Jenkins 中编写了一个声明性管道。此管道应在远程 Docker 服务器上的 Docker 容器中运行。

我读了 Customizing the execution environment :

Customizing the execution environment

Pipeline is designed to easily use Docker images as the execution environment for a single Stage or the entire Pipeline. Meaning that a user can define the tools required for their Pipeline, without having to manually configure agents. Practically any tool which can be packaged in a Docker container. can be used with ease by making only minor edits to a Jenkinsfile.

pipeline {
agent {
docker { image 'node:7-alpine' }
}
stages {
stage('Test') {
steps {
sh 'node --version'
}
}
}
}


它可以工作,但它使用 Jenkins 服务器作为 Docker 服务器。

我读了 Using a remote Docker server :

Using a remote Docker server

By default, the Docker Pipeline plugin will communicate with a local Docker daemon, typically accessed through /var/run/docker.sock.

To select a non-default Docker server, such as with Docker Swarm, the withServer() method should be used.

By passing a URI, and optionally the Credentials ID of a Docker Server Certificate Authentication pre-configured in Jenkins, to the method with:

node {
checkout scm

docker.withServer('tcp://swarm.example.com:2376', 'swarm-certs') {
docker.image('mysql:5').withRun('-p 3306:3306') {
/* do things */
}
}
}


这有效,但它使用脚本化管道。

我也看了 Specifying a Docker Label :

Specifying a Docker Label

By default, Pipeline assumes that any configured agent is capable of running Docker-based Pipelines. For Jenkins environments which have macOS, Windows, or other agents, which are unable to run the Docker daemon, this default setting may be problematic. Pipeline provides a global option in the Manage Jenkins page, and on the Folder level, for specifying which agents (by Label) to use for running Docker-based Pipelines.



但是使用标签需要一个完整的 Jenkins slave 和 sshd 并且安装了一个 Jenkins 用户,并且一直在线并且 Jenkins 的 master 会安装从库。仅使用声明性管道而不是脚本化管道,这听起来有点沉重。

如何使用声明式管道在远程 Docker 服务器上构建?

最佳答案

我认为你在这里混合了一些东西。关于 documentation's part about the agent ,代理部分用于标识您的阶段应该在哪个节点上运行,以及特殊的配置和信息。

Docker 标签反过来给出了它应该从镜像内部运行的信息。

这不会为您连接到外部 docker 服务器留下任何空间,除非您将其设置为带有一些特殊标签的 Jenkins 节点,例如“docker-special”。然后你可以做一些简单的事情

agent {
docker {
image 'maven:3-alpine'
label 'docker-special'
}
}

docker 标签上的文档部分

docker

Execute the Pipeline, or stage, with the given container which will be dynamically provisioned on a node pre-configured to accept Docker-based Pipelines, or on a node matching the optionally defined label parameter.



至于您的特定用例。

jenkins的这部分 documentation , 提到了 sidecar 模式/高级用法,他们立即切换到脚本化。

所以是的,正如我所提到的,这在声明式中不可用。声明式的唯一出路是将外部服务器标记为具有特定标签的 jenkins 节点。

关于docker - 如何使用 Jenkins 声明式管道在远程 Docker 服务器上构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54910646/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com