1

I am setting up a Jenkins pipeline (declarative script) using a Docker container agent built from a Dockerfile. I want one of the build stages to fetch dependent packages (Debian packages, from Artifactory, in my case) and then install them within the Docker container. Installing those packages (using dpkg, in my case) needs super-user permission, and thus sudo. How do I set up the pipeline and/or Dockerfile to enable that?

At present, my Jenkinsfile is somewhat like this:

pipeline {
    agent {
        dockerfile {
            filename 'Dockerfile.jenkins'
        }
    }
    stages {
        stage('Set up dependencies') {
            steps {
                sh 'rm -rf dependent-packages && mkdir dependent-packages'
                script {// Fetch packages from Artifactory
                    def packageserver = Artifactory.server 'deb-repo-srv'
                    def downloadSpec = ...
                    packageserver.download(downloadSpec)
                }
                sh 'sudo dpkg -i -R dependent-packages/'
            }
        }
        ...
    }
}

And my Dockerfile is like this:

# Set up the O/S environment
FROM debian:9

# Add the build and test tools
RUN apt-get -y update && apt-get -y install \
   cmake \
   doxygen \
   g++ \
   libcppunit-dev \
   make \
   libxerces-c-dev

Because I am using a Dockerfile agent, simply adding the jenkins user to the sudoers file of the Jenkins server will not work.

Raedwald
  • 46,613
  • 43
  • 151
  • 237

0 Answers0