逆引きマニュアル: Jenkins: Dockerの使用方法

投稿日: 更新日:

現時点での結論

daemonとして動かすことを想定しているようなので、 それ以外で使う場合、例えばビルドにはJenkinsの機能は使わないほうが良さそうです。 いろいろ格闘したんですが、うまくいかなかったので。。。

実行時の注意

共通で -d オプションが付き、さらに --entrypoint cat が付くので、 実行したいものはJenkinsfileに sh で直接コマンドを書く。 -d オプションなしはissueとして上がっている1

  • Docker実行には、1つexecutorを消費する模様。
  • 実行時に自動的に以下のオプションが付く。
    • 共通
      • -d: バックグラウンド実行
    • Declarative Pipeline, inside
      • -t
      • -u <JenkinsのUID>:<JenkinsのGID>
      • -w <ワークスペースのパス>
      • -v: ワークスペースの内容をマップしているようです。
      • --entrypoint cat

UID/GIDの取得

Jenkinsfileの書き方

stageの中に書く / 外部イメージを指定する場合

stage ('...') {
  agent {
    docker {
      image "..."
      args "..."
    }
  }
}

stageの中に書く / Dockerfileを指定する場合

stage ('...') {
  agent {
    dockerfile {
      dir "..."
      additionalBuildArgs "..."
      args "..."
    }
  }
}

複雑な環境の場合

標準のオプションを置き換える場合は、 Scripted Pipelineを使って自前で書いたほうが良さそうです。

  • -w
  • -u

以下のようなイメージで。

stage ('...') {
  steps {
    sh 'docker build .'
    script {
      docker.image("centos").withRun('-v $HOME/.m2:/root/.m2") {
        sh 'ls'
      }
    }
  }
}

  1. [JENKINS-48417] Ability to run Docker container in foreground mode (no detached) - Jenkins JIRA

公式サイト

マニュアル