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:チェック」
完了
ノード管理画面で、エラーメッセージがなければ、完了です