Jenkins
docker

今更だけどDockerでJenkins構築するのにデータ永続化必須だよねって言ってほしかった

Docker覚えたての時、JenkinsとDockerって相性悪いと思っていた。
DockerでJenkins動かしたらコンテナ内にビルドしたモジュール取りに行くの大変じゃない?
そんな手間かけるくらいなら最初からJenkinsをローカルにインストールした方がはやくないない?って
そんなことなかった。盛大な勘違してた。

ちょっと感動したので、その時のメモ書き。

DockerでJenkins構築するにはビルド結果のデータを永続化

  • Dockerの永続化って、要はコンテナとローカルのフォルダを共有させること。
  • コンテナ内のJenkinsの「/var/jenkins_home」中に成果物(ビルド結果)が入る。 それをローカル「/home/java-user/jenkins-docker」に出力すれば良い。
Dockerでjenkinsを起動するコマンド
docker run -p 8080:8080 -p 50000:50000 -v /home/java-user/jenkins-docker:/var/jenkins_home jenkins
  • Docker Composeで書くと以下のような形になる。docker-compose upで起動可能。
docker-compose.yml
version: '3.3'

services:
  jenkins:
    image: jenkins:2.60.3
    ports:
      - '8080:8080'
      - '5000:5000'
    volumes:
      - /home/java-user/jenkins-docker:/var/jenkins_home

初回起動時の注意事項

  • 初回インストール時は、インストールキーを入力必要なのでオプションdはつけない。

よしビルドしてみよう!そしたらエラった

  • Javaのブログラムでgradleでビルドしたとき、GitからCloneしたファイルのアクセス権ないよってエラーが出力された。
FATAL: command execution failed
java.io.IOException: Cannot run program "/var/jenkins_home/workspace/doma-sample/gradlew" (in directory "/var/jenkins_home/workspace/doma-sample"): error=13, Permission denied
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
    at hudson.Proc$LocalProc.<init>(Proc.java:245)
    at hudson.Proc$LocalProc.<init>(Proc.java:214)
    at hudson.Launcher$LocalLauncher.launch(Launcher.java:850)
    at hudson.Launcher$ProcStarter.start(Launcher.java:384)
    at hudson.Launcher$ProcStarter.join(Launcher.java:395)
    at hudson.plugins.gradle.Gradle.performTask(Gradle.java:333)
    at hudson.plugins.gradle.Gradle.perform(Gradle.java:225)
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:735)
    at hudson.model.Build$BuildExecution.build(Build.java:206)
    at hudson.model.Build$BuildExecution.doRun(Build.java:163)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:490)
    at hudson.model.Run.execute(Run.java:1735)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:97)
    at hudson.model.Executor.run(Executor.java:405)

じゃあアクセス権付与すればよい。

シェルスクリプトに以下のように記載
cd /var/jenkins_home/workspace/doma-sample/
chmod +x gradlew

※ Jenkinsの設定イメージ

build-gradle.png

無事、ビルドできました。あとはビルドしたファイルをローカルの環境で動かすだけ。