簡體   English   中英

Docker 容器在項目內部重建

[英]Docker container rebuild inside of a project

我有一個具有以下結構的項目:

  • 碼頭工人/碼頭工人文件

  • linux/*.xz(內核源代碼)

  • *.sh

  • 詹金斯文件

基本上,這個管道是在 docker 容器內構建一個 linux 內核。

我們將 bitbucket 與 jenkins 和 artifactory 結合用於 CI/CD。

目前 docker 鏡像的構建是手動的:開發人員在本地構建它並將其推送到工件。

管道僅提取預構建的 docker 映像以供執行。

由於這種手動交互很煩人,因此應該自動化。

典型場景可能如下所示:開發人員更改 Dockerfile 和其他一些資源。

這要求我們首先重建容器,將其推送到工件,然后開始構建。

有沒有使用上述技術的直接方法來做到這一點?

我的方法是(主要是自己的實現)根據 git 版本標記 docker 圖像。

當上述管道啟動時,它會查詢上次更改的 Dockerfile 的 git-rev 並嘗試拉取

容器。 如果這是可能的 - 很好。 否則運行“docker build”並推送新容器。 然后在里面運行內核構建。

這是一個正確的方法嗎?

可能的選項如下。

選項1

為了確定是否必須構建新映像,您可以依賴 Jenkins Changeset 您可以檢查docker/Dockerfile文件是否與上次構建相比發生了變化,如果是,您可以執行構建步驟或跳過它。

此外,在標記圖像時,您可以創建兩個圖像標記。 一個帶有修訂版(或任何其他唯一標識符),並將latest標簽替換為最新構建的圖像。 這將允許您在管道的連續步驟中擁有一個簡單的邏輯,因為我們知道最新的構建映像位於最新的標簽中。 下面的示例管道。

pipeline {
    agent any

    stages {
        stage('BuildImage') {
            when { changeset "**/Dockerfile" }
            steps {
                script {
                 def image = docker.build("my-image:REVISION", "docker/Dockerfile")
                 image.push() // Pushes the tagged image with revision
                 image.push('latest') // Change the tag and push
                }
            }
        }
        
        stage('Other Build') {
            steps {
                 docker.image('my-image:latest').inside {
                    // Do other stuff within the Docker image
                }
            }
        }
        
        stage('Other Build option 2') {
            agent {
                docker { image 'node:16.13.1-alpine' }
            }
            steps {
                // Do other stuff within the Docker image
            }
        }
    }
}

選項 2

另一種選擇是始終使用 Docker 文件啟動新的 Jenkins 代理/容器,或者始終構建映像,然后使用容器執行構建命令。 如果您經常更改 Dockerfile,這可能會很有效。 下面的示例管道。

pipeline {
    agent { dockerfile { dir 'docker' } }

        stage('Other Build') {
            steps {
                // Do other stuff within the Docker image
            }
        }
        }
    }
}

暫無
暫無

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

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