Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-49677

Docker image tag based on hash of Dockerfile

    Details

    • Similar Issues:

      Description

      I've got a multi-branch declarative pipeline build job that uses 

      agent { dockerfile true }

      to set up a container for the build.  Multiple branches have an identical Dockerfile, but building an image produces different results, as the result also depends on other files in the repository.

      We recently had a job that failed due to two branches building in parallel; after much head scratching we realised the same tag had been applied to both of the two docker images built, so one of the branches ended up being built inside a container based on the other branch's image.  Digging in to the code, I can see that the image tag is currently based on the hash of the Dockerfile - I think this is flawed, as identical Dockerfiles do not necessarily produce the same output.

      I can think of two other options:

      1. Use a tag based on the (full) job name
      2. Use a randomly generated tag

      I believe Docker is already pretty clever about re-using cached intermediate images, so I don't think these changes will have a significant impact on subsequent image build times, even if a random tag is used.

        Attachments

          Issue Links

            Activity

            Hide
            abayer Andrew Bayer added a comment -

            Gonna go with Utils.stringToSHA1(currentBuild.fullProjectName + "\n" + readFile(dockerfile)) - currentBuild.fullProjectName gets the full job name, so that should do the trick.

            Show
            abayer Andrew Bayer added a comment - Gonna go with Utils.stringToSHA1(currentBuild.fullProjectName + "\n" + readFile(dockerfile)) - currentBuild.fullProjectName gets the full job name, so that should do the trick.
            Hide
            abayer Andrew Bayer added a comment -

            PR up for review at https://github.com/jenkinsci/pipeline-model-definition-plugin/pull/247 - I can't think of a good way to test this, though.

            Show
            abayer Andrew Bayer added a comment - PR up for review at https://github.com/jenkinsci/pipeline-model-definition-plugin/pull/247 - I can't think of a good way to test this, though.
            Hide
            gllewellyn Gavin Llewellyn added a comment -

            Looks good to me, thanks for the quick response!

            Show
            gllewellyn Gavin Llewellyn added a comment - Looks good to me, thanks for the quick response!
            Hide
            scm_issue_link SCM/JIRA link daemon added a comment -

            Code changed in jenkins
            User: Andrew Bayer
            Path:
            pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/agent/impl/DockerPipelineFromDockerfileScript.groovy
            http://jenkins-ci.org/commit/pipeline-model-definition-plugin/6c5c09eb278b490d8544624e3c1f897e7e139ed4
            Log:
            [FIXED JENKINS-49677] Include full project name in hash for Dockerfile tag

            Show
            scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Andrew Bayer Path: pipeline-model-definition/src/main/resources/org/jenkinsci/plugins/pipeline/modeldefinition/agent/impl/DockerPipelineFromDockerfileScript.groovy http://jenkins-ci.org/commit/pipeline-model-definition-plugin/6c5c09eb278b490d8544624e3c1f897e7e139ed4 Log: [FIXED JENKINS-49677] Include full project name in hash for Dockerfile tag
            Hide
            abayer Andrew Bayer added a comment -

            This'll be in the upcoming Declarative 1.2.8 release.

            Show
            abayer Andrew Bayer added a comment - This'll be in the upcoming Declarative 1.2.8 release.
            Hide
            cybojenix Anthony King added a comment -

            Hi,

            I've encountered this issue when dockerfiles run when running a parallel pipeline within the same project.

             

            For now, our workaround is to include a comment in one.

            An example is located here:

            https://github.com/cybojenix/jenkins-docker-parallel/tree/6737a3964d689f1e3b9f514dd4de788c44a93999

             

            Show
            cybojenix Anthony King added a comment - Hi, I've encountered this issue when dockerfiles run when running a parallel pipeline within the same project.   For now, our workaround is to include a comment in one. An example is located here: https://github.com/cybojenix/jenkins-docker-parallel/tree/6737a3964d689f1e3b9f514dd4de788c44a93999  

              People

              • Assignee:
                abayer Andrew Bayer
                Reporter:
                gllewellyn Gavin Llewellyn
              • Votes:
                0 Vote for this issue
                Watchers:
                5 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: