17
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Jenkinsのジョブをソースコードとしてバージョン管理したい

Last updated at Posted at 2017-12-03

調べると過去の先人達の記事が幾つか出てきますが、私のしたい事とはちょっとずつ違っていたので、あれこれやってみた事をまとめてみました。

やりたいこと

  • Jenkinsのジョブ設定 (とPipelineコード) のみをバージョン管理したい
    • $JENKINS_HOME/jobs/{job-name}/config.xml
  • それ以外はバージョン管理しない
    • ジョブ履歴
    • ジョブワークスペース
    • 認証情報
    • ユーザー情報
    • etc...
  • Jenkinsの動作環境の構築手順もコード化したい

出来たもの

動くものがここ↓にあります。

動作環境:
→ Linux系OS, docker: 17.09.0-ce, docker-compose: 1.16.1

うごかしかた

githubからコードをcloneします。

$ git clone https://github.com/megmogmog1965/version-controlled-jenkins

コンテナを起動します。 (ビルドも勝手にされます)

$ cd /path/to/version-controlled-jenkins/
$ docker-compose up -d

ブラウザでアクセスします。

ホストマシンの ./jenkins_home/secrets/initialAdminPassword に Administrator password があります

起動時点で既にジョブ "Build docker image" があります。

  • jenkins-jobs.png

中身は Jenkins Pipeline ジョブです。docker/labs.git をcloneしてImageをビルドします。

node {
    stage('Clone git repository') {
        git url: 'https://github.com/docker/labs.git', branch: params['branch']
    }
    stage('Build docker image') {
        sh "cd beginner/flask-app/ && docker build -t ${params.image_name}:${params.image_tag} ."
    }
}

もちろん新規に追加することもできます。

  • new-job.png

追加したジョブ設定は git add . でバージョン管理対象にできます。その他の設定・データの類は無視されます。

$ git add .
$ git status

On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:

	new file:   jenkins_home/jobs/new_job/config.xml

しくみ

  • Dockerfile / docker-compose.yml でJenkins動作環境をコード化します
  • $JENKINS_HOME をgitでバージョン管理します。但し .gitignore$JENKINS_HOME/jobs/{job-name}/config.xml 以外を全て管理対象から外します
.
├── .gitignore
├── Dockerfile
├── docker-compose.yml
└── jenkins_home
    └── jobs
        └── {ジョブ名}
            └── config.xml

Dockerfile

Jenkins公式のImage を元にカスタマイズして作ります。
ジョブが必要とする環境 (dockerコマンドとか, java, mvn, npm, etc...) の構築はここでソースコード化します。

FROM jenkins:2.60.3-alpine

# using root.
USER root

# setup local environment.
RUN apk upgrade --update && \
    apk add --no-cache --update docker curl

docker-compose.yml

コンテナの立ち上げ方をソースコード化します。

  • ホストマシンの ./jenkins_home ディレクトリをコンテナの $JENKINS_HOME にマウントします。Jenkinsのデータはホストマシン上で永続化されます
  • ホストマシンの ./jenkins_home はジョブ設定 config.xml だけがgitバージョン管理されます
version: '3.1'
services:
  jenkins:
    build: .
    ports:
      - "8080:8080"
      - "50000:50000"
    volumes:
      - ./jenkins_home:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock

/var/run/docker.sock:/var/run/docker.sock をマウントしているのは、Jenkinsジョブがdockerコマンドを使える様に、docker in docker の為です。これのせいでWindowsで動かないので、なくてもいいです。

.gitignore

ホストマシンの ./jenkins_home ディレクトリへのgit管理対象の除外設定です。
ジョブ設定 $JENKINS_HOME/jobs/{job-name}/config.xml のみがバージョン管理対象になります。

# manage: "jenkins_home/jobs/{job-name}/config.xml"
!jenkins_home/
jenkins_home/*
!jenkins_home/jobs/
jenkins_home/jobs/*
!jenkins_home/jobs/*/
jenkins_home/jobs/*/*
!jenkins_home/jobs/*/config.xml
17
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?