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の設定イメージ
無事、ビルドできました。あとはビルドしたファイルをローカルの環境で動かすだけ。