Introduction

JenkinsをSynology NASに構築したのでメモ。
Slaveノードは別マシンに構築します。

How to?

用意するもの

jenkinsのディレクトリを用意します。
これらはdockerコンテナにマウントされます。
今回は下記をマウントします。

  • /docker/jenkins/jenkins_home
  • /docker/jenkins/share/jenkins
  • /docker/jenkins/share/jenkins/ref

そして権限を変更します。

1
$ sudo chown -R 1000 /volume1/docker/jenkins

Jenkinsのダウンロード

dockerの場合、コンテナ内のデータは破棄されてしまうため、Jenkins本体をマウントする形にすることでアップデートできるようにします。

Generic Java package (.war)**をダウンロードし、Jenkins.war/docker/jenkins/share/jenkins**にコピーします。

キーストアの作成

HTTPSで接続するために作成します。既にLet’s Encryptで証明書は発行済みであるものとします。
HTTPで良い場合は、必要ありません。

Javaをインストールする必要があるのでパッケージ センターからインストールします。
パッケージ センター

インストール後のパス

続いて、下記のシェルをsudoで実行します。

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash

KEYROOT=/usr/syno/etc/certificate/system/default
KEY_PEM=${KEYROOT}/privkey.pem
CERT_PEM=${KEYROOT}/cert.pem
JAVA_HOME=/var/packages/Java7/target/j2sdk-image/jre/bin
KEYSTORE=/volume1/docker/jenkins/jenkins_home/keystore

openssl rsa -des3 -in $KEY_PEM -out key.encrypted.pem
openssl pkcs12 -inkey key.encrypted.pem -in $CERT_PEM -export -out keys.encrypted.pkcs12
${JAVA_HOME}/keytool -importkeystore -srckeystore keys.encrypted.pkcs12 -srcstoretype pkcs12 -destkeystore $KEYSTORE

下記のように実行します。
パスワードの空文字は許容されません。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ sudo ./generate_jenkins_keystore.sh
writing RSA key
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
Enter pass phrase for key.encrypted.pem:
Enter Export Password:
Verifying - Enter Export Password:
Importing keystore keys.encrypted.pkcs12 to /volume1/docker/jenkins/keystore_...
Enter destination keystore password:
Re-enter new password:
Enter source keystore password:
Entry for alias 1 successfully imported.
Import command completed: 1 entries successfully imported, 0 entries failed or cancelled

Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore /volume1/docker/jenkins/keystore_ -destkeystore /volume1/docker/jenkins/keystore_ -deststoretype pkcs12".

コンテナの作成

キーストア作成の時に入力したパスワードを指定してコンテナの起動を実行します。
ホスト側のポートは適宜変更します。
HTTPで良い場合は、**–http** から始まる引数を削除します。

1
2
3
4
5
6
7
8
9
10
$ sudo docker run -v /volume1/docker/jenkins/jenkins_home:/var/jenkins_home \
-v /volume1/docker/jenkins/share/jenkins:/usr/share/jenkins \
-p 38080:8443 \
-p 50003:50000 \
--name jenkins \
jenkins/jenkins:alpine \
--httpPort=-1 \
--httpsPort=8443 \
--httpsKeyStore=/var/jenkins_home/keystore \
--httpsKeyStorePassword=

コンソールが流れてしばらくするとadminの初期パスワードが表示されますのでメモしておきます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
*************************************************************
*************************************************************
*************************************************************

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

b0c58624703945a3ba1517b556b0f1bc

This may also be found at: /var/jenkins_home/secrets/initialAdminPassword

*************************************************************
*************************************************************
*************************************************************

初期設定

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

Jenkinsのアンロック。メモした初期パスワードを入力

Jenkinsのアンロック

プラグインのインストール。Install suggested plugins を選択

インストール中

ユーザ登録。入力後、Save and Finish

準備完了