簡體   English   中英

如何在 Jenkins 從節點上運行 Dockerfile 代理?

[英]How to run Dockerfile agent on a Jenkins Slave Node?

請在下面幫助我。 我在一台共享服務器上安裝了 Jenkins。 目前被多個團隊使用,因此不允許在那里安裝額外的軟件包/軟件。 每個團隊都有自己的專用從節點添加到他們根據需要進行配置的位置。 同樣,我們有一個專用節點來運行我們的工作。(這也是我想運行我的工作的地方)

我有 bitbucket 存儲庫,其中“ Jenkinsfile ”將具有部署步驟和“ Dockerfile ”,我們希望從中創建容器並在其中運行部署步驟。

我試圖先用一些例子來測試這個。 所以我有這樣的“ Dockerfile ”。

#This image is Developed from ubuntu:18.04-Dockerhub
FROM ubuntu:18.04

#Updating System Packages and installing required packages
RUN apt-get update && \
    apt-get install -y openssh-server wget git curl zip unzip && \
    apt-get clean

#Installing rsync
RUN apt-get install -y rsync 

我在哪里有“ Jenkinsfile ”,如下所示。

pipeline {
    agent { node { label 'slave_node' } }
    stages {
        stage('Test') {
            agent {
                dockerfile true
            }
            steps {
                sh 'cat /etc/os-release'
                sh 'curl --version'
                sh 'echo Successfully compiled'
            }
        }
    }
} 

當我執行這個管道作業時,

  • 它獲取 Jenkins 文件。
  • 在提到的從節點上正確啟動。
  • 簽出回購代碼。
  • 分階段進行
  • 但是當涉及到階段('Test')時,Node 變回“Master Jenkins”並再次開始檢查 repo 代碼。 [這是我有問題的地方。 我不知道為什么會切換]
  • 分階段進行
  • 運行“Docker 文件”
  • 嘗試從集線器中提取圖像。 但由於“找不到 Docker 命令”而使作業失敗(預期錯誤,因為主節點沒有設置。

問題是:為什么 Job 從 Slave_node 切換到 master_node? 請幫忙。 提前致謝。

如果我在我的個人筆記本電腦上運行它,它工作得非常好。

我會在 Jenkins 中檢查您的 Docker 設置。 可能您已將主節點定義為默認 Jenkins 代理,因此當您僅使用 'dockerfile: true' 運行時,它會嘗試在主節點上運行構建。

您可以通過在本文檔中搜索“指定 Docker 標簽”來找到對此特定選項的參考。

https://www.jenkins.io/doc/book/pipeline/docker/

參考https://www.jenkins.io/doc/book/pipeline/docker/我能夠使用腳本化管道來滿足我的需求。 所以在這里發布作為答案。

但我仍然不知道聲明式管道有什么問題。

node ('slave_node') {
    checkout scm
    def customImage = docker.build("custom-image-name")
    customImage.inside {
        sh 'Inside Container'
        sh 'cat /etc/os-release'
    }
}

謝謝

找到了另一種方法來實現這一點。 我們可以使用 dockerfile 功能本身與任何代理節點結合。

示例如下

#!/usr/bin/env groovy
pipeline {
  agent {
    dockerfile {
      filename 'Dockerfile'
      label 'slave_node'
    }
  }
  stages {
    stage("example stage") {
      steps {
        script {
          sh 'cat /etc/os-release'
          sh 'curl --version'
          sh 'echo Successfully compiled'
        }
      }
    }
  }
}

可以在此處找到源:語法並搜索關鍵字“dockerfile”以查找詳細信息。

以下代碼也有效,如果您不想實時構建 docker 圖像,可以使用此代碼。 所以不需要Dockerfile,我們可以直接指定鏡像名稱。

pipeline {
    agent {
        docker { 
            image 'image-name'                 
            label 'common-build-machine' 
        }
    }
...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM