在我的Jenkins服务器(部署有官方jenkins image)上,我需要运行以下代码来构建我的Docker映像
def buildDockerImage() {
sh "docker build --network=host -t $DOCKER_REPO ."
}
请注意--network=host
选项。
现在,我的问题是在我的开发笔记本电脑上,我不需要该选项来构建映像。这是为什么?为什么我的笔记本电脑上不需要它,但我在jenkins服务器上需要它? Jenkins服务器托管在Jelastic环境中,如下所示:
env:
topology:
nodes:
- image: jenkins/jenkins:lts
count: 1
cloudlets: 32
nodeGroup: cp
Docker的安装如下:
mv /etc/init.d/kmod /etc/init.d/kmod.back
apt -y install apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
apt-key fingerprint 0EBFCD88
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
apt update
apt -y install docker-ce docker-ce-cli containerd.io
service docker start
usermod -aG docker jenkins
我需要配置一些东西以使其在没有该网络选项的情况下发生吗?
答案 0 :(得分:2)
误解发生在预装Jenkins并在其后安装Docker工具的位置。 Jelastic提供使用变量和特殊重定向的功能。默认情况下,Jenkins从端口80重定向到8080,您可以通过已经生成的环境名称直接访问它。 您应该遵循的方法是通过特殊的' JELASTIC_EXPOSE = DISABLED '变量禁用自动重定向,并使用公共IP。如果您不想使用公共IP,请查找端点功能。
ports文章
中对此有所有描述答案 1 :(得分:1)
根据Jelastic的回答,我在安装我的Jenkins CI / CD环境的jps清单中添加了以下步骤:
actions:
setupJenkinsForDocker:
- api:
- method: jelastic.environment.control.AddContainerEnvVars
params:
nodeGroup: cp
vars:
JELASTIC_EXPOSE: DISABLED
- api:
- method: jelastic.environment.control.AddEndpoint
params:
nodeId: ${nodes.cp.id}
privatePort: 8080
protocol: TCP
name: jenkins/jenkins
当然,这意味着我适应了所有在该jenkins环境上触发某些作业的webhooks,因为这需要在我的jenkins端点中使用一个端口。
现在,当我构建需要互联网连接的docker映像时,不再需要设置选项--network=host
。