end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

deployment of master/slave jenkins into AlmaLinux docker

https://end0tknr.hateblo.jp/entry/20230128/1674863423

前回のentry に続き、docker compose ver.2 の手習い。

当初、以下のurlを参考に進めましたが、 最近のjenkins は jdk8→jdk11をサポート対象としている為、 参考urlの手順からは、少々変更しています。

参考url https://kacfg.com/aws-ec2-docker-jenkins

dockerは、最近では随分、浸透してきた印象がありますが、 「インターネット上に情報がいろいろある」とまではないらしく、 実サービスで利用するには、自身にまだまだ知識が必要。

という印象です。

目次

master jenkins の構築

$ vi docker-compose.yml

version: "3"
services:
  jenkins:
    container_name: master
    image: jenkins/jenkins:lts-jdk11
    ports:
      - 8080:8080
    volumes:
      - ./jenkins_home:/var/jenkins_home

https://hub.docker.com/r/jenkins/jenkins

$ mkdir jenkins_home; $ sudo chown 1000:1000 jenkins_home

ymlのvolumes によりコンテナ内のデータをmountし、永続化できます。 ただし、コンテナ内のjenkinsユーザが uid:gid=1000:1000の為、以下を実行します。

$ mkdir jenkins_home;
$ sudo chown 1000:1000 jenkins_home

上記を実行しないと、以下のエラーになります

$ docker compose up
Attaching to jenkins
jenkins  | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
jenkins  | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied

jenkins実行と、初期パスワード確認

$ docker compose up -d
  :
$ cat jenkins_home/secrets/initialAdminPassword
26f161b117464d968d0faafb20926714

ブラウザアクセスで、初期設定

http://192.168.56.113:8080 へ、ブラウザでアクセスし、 先程の初期パスワードでログイン。

プラグインのインストール

管理者アカウントを作成

最後にjenkinsへのアクセス用urlを確定し、完了

master jenkins 用のssh key作成

以降のstepで、ssh接続によるslaveを作成しますが、 このssh接続に必要な ssh keyを作成します。

$ docker container exec -it master ssh-keygen -t rsa -C ""
Generating public/private rsa key pair.
Enter file in which to save the key (/var/jenkins_home/.ssh/id_rsa): 
Created directory '/var/jenkins_home/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /var/jenkins_home/.ssh/id_rsa
Your public key has been saved in /var/jenkins_home/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:yYWsy0igixQ8acbqiUKO4zlIjH+wDSc201aEiCEhS3s 
The key's randomart image is:
+---[RSA 3072]----+
|== . .           |
|B.+ . .. .       |
|.X.E .  o .      |
|+.+.  .o o       |
|=o .... S        |
|X+O.+o .         |
|X* @. o          |
|+o+ o            |
| o..             |
+----[SHA256]-----+

ssh keyの作成完了後、一旦、dockerを停止して構いません。

$ docker compose down

slave jenkins の構築

$ vi docker-compose.yml

先程作成した docker-compose.yml に slave用の設定を追加

version: "3"
services:
  jenkins:
    container_name: master
    image: jenkins/jenkins:lts-jdk11
    ports:
      - 8080:8080
    volumes:
      - ./jenkins_home:/var/jenkins_home
  slave01:
    container_name: slave01
    build: .
    environment:
      - JENKINS_SLAVE_SSH_PUBKEY=ssh-rsa AAAAB3N【略】
      # cf. jenkins_home/.ssh/id_rsa.pub

$ vi Dockerfile

slaveでは、javaがpathに含まれておらず、ln -s を必要とする為、 slave用にDockerfile を作成します。

FROM jenkinsci/ssh-slave
RUN ln -s /usr/local/openjdk-8/bin/java /usr/local/bin/java

https://hub.docker.com/r/jenkins/ssh-slave/

master & slave の起動

$ docker compose up -d
$ docker compose ps
NAME    IMAGE                     COMMAND         SERVICE  PORTS
master  jenkins/jenkins:lts-jdk11 "/usr/bin/tini" jenkins  0.0.0.0:8080->8080/tcp
slave01 26-slave01                "setup-sshd"    slave01  22/tcp

slaveの追加設定

再び、ブラウザで http://192.168.56.113:8080 へ、アクセスし、 以下の設定を行ってください。

左ペイン → Jenkinsの管理

新規ノード作成

「ノード名:slave01」「Permanent Agent:チェック」






完了

ノード管理画面で、エラーメッセージがなければ、完了です