問題点の修正
This commit is contained in:
parent
b4ac62eeb5
commit
bfa75a897b
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
|||||||
vscode
|
vscode
|
||||||
|
volume
|
||||||
|
@ -9,7 +9,7 @@ footer: "Jenkins CI/CD ハンズオン"
|
|||||||
|
|
||||||
- CI/CDの基礎を理解する
|
- CI/CDの基礎を理解する
|
||||||
- Jenkinsでの自動化ワークフローを体験
|
- Jenkinsでの自動化ワークフローを体験
|
||||||
- 簡単なアプリケーションのビルドとテスト
|
- GiteaとMattermostを活用した簡単なCI/CDパイプライン構築
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -18,9 +18,8 @@ footer: "Jenkins CI/CD ハンズオン"
|
|||||||
1. Jenkinsの概要
|
1. Jenkinsの概要
|
||||||
2. 「Hello World」ジョブの作成
|
2. 「Hello World」ジョブの作成
|
||||||
3. サンプルアプリケーションのビルドとテスト
|
3. サンプルアプリケーションのビルドとテスト
|
||||||
4. 簡単なデプロイ処理
|
5. Gitea Webhookを使った自動トリガー
|
||||||
5. GitHub Webhookを使った自動トリガー
|
6. Mattermost通知の設定
|
||||||
6. (オプション) Slack通知の設定
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -35,16 +34,16 @@ footer: "Jenkins CI/CD ハンズオン"
|
|||||||
# Step 1: 「Hello World」ジョブの作成
|
# Step 1: 「Hello World」ジョブの作成
|
||||||
|
|
||||||
1. **ジョブの作成**:
|
1. **ジョブの作成**:
|
||||||
- 「新しいジョブ作成」 → 「フリースタイルプロジェクト」
|
- 「新規ジョブ作成」 → 「フリースタイルプロジェクト」
|
||||||
- ジョブ名を「Hello World」に設定
|
- ジョブ名を「Hello World」に設定
|
||||||
|
|
||||||
2. **ビルド設定**:
|
2. **ビルド設定**:
|
||||||
- 「ビルド」セクション → 「シェルの実行」
|
- Build Steps → ビルド手順の追加 → 「シェルの実行」
|
||||||
- コマンド: `echo "Hello, World!"`
|
- コマンド: `echo "Hello, World!"`
|
||||||
|
|
||||||
3. **実行と確認**:
|
3. **実行と確認**:
|
||||||
- 「ビルド」ボタンをクリック
|
- 「ビルド実行」ボタンをクリック
|
||||||
- コンソール出力で結果を確認
|
- Buildsに追加された履歴を開き、コンソール出力で結果を確認
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -77,76 +76,62 @@ if __name__ == "__main__":
|
|||||||
# Step 2 (続き): ビルドとテストの自動化
|
# Step 2 (続き): ビルドとテストの自動化
|
||||||
|
|
||||||
1. **新規ジョブ作成**:
|
1. **新規ジョブ作成**:
|
||||||
- 「新しいジョブ作成」 → 「フリースタイルプロジェクト」
|
- 「新規ジョブ作成」→「フリースタイルプロジェクト」
|
||||||
- ジョブ名:「Pythonアプリビルドとテスト」
|
- ジョブ名:「Pythonアプリビルドとテスト」
|
||||||
|
|
||||||
2. **Gitリポジトリの設定**:
|
2. **Giteaリポジトリの設定**:
|
||||||
- 「ソースコード管理」→「Git」を選択
|
- 「ソースコード管理」→「Git」を選択
|
||||||
- リポジトリURLを入力
|
- リポジトリURLを入力、資格情報を追加
|
||||||
|
- 「ビルドするブランチ」を「main」に変更
|
||||||
|
|
||||||
3. **ビルド設定**:
|
3. **ビルド設定**:
|
||||||
- 「シェルの実行」→ `python3 -m unittest test_app.py`
|
- Build Steps →「シェルの実行」→ `python3 -m unittest test_app.py`
|
||||||
|
|
||||||
4. **実行と確認**:
|
4. **実行と確認**:
|
||||||
- ジョブを実行し、テスト結果を確認
|
- ジョブを実行し、テスト結果を確認
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Step 3: デプロイ処理の追加
|
# Step 3: Gitea Webhookでの自動トリガー
|
||||||
|
|
||||||
1. **アーティファクト保存**:
|
1. **ビルド・トリガの設定**:
|
||||||
- 「ビルド後の処理」 → 「アーカイブするアーティファクト」
|
- 「ビルド・トリガ」→「GitHub hook trigger for GITScm polling」を有効化
|
||||||
- 保存するファイル:`*.zip`
|
|
||||||
|
|
||||||
2. **シェルコマンド追加**:
|
2. **Giteaの設定**:
|
||||||
- 「シェルの実行」→ `zip -r app.zip .`
|
- Giteaリポジトリの 設定 → Webhook → Webhook追加 → Gitea
|
||||||
|
- URL: `http://<使っているjenkinsのURL>/gitea-webhook/`
|
||||||
3. **実行と確認**:
|
|
||||||
- ジョブ実行後、ZIPファイルが生成され、アーティファクトとして保存されていることを確認
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Step 4: GitHub Webhookでの自動トリガー
|
|
||||||
|
|
||||||
1. **ビルドトリガーの設定**:
|
|
||||||
- 「ビルドトリガー」→「GitHub hook trigger for GITScm polling」
|
|
||||||
|
|
||||||
2. **GitHubの設定**:
|
|
||||||
- GitHubリポジトリの「Settings > Webhooks」→ Webhook追加
|
|
||||||
- URL例: `http://localhost:8081/github-webhook/`
|
|
||||||
- Content typeは`application/json`
|
- Content typeは`application/json`
|
||||||
|
|
||||||
3. **確認**:
|
3. **確認**:
|
||||||
- GitHubに変更をプッシュし、Jenkinsでジョブが自動的に実行されることを確認
|
- Giteaリポジトリに変更をプッシュし、Jenkinsでジョブが自動的に実行されることを確認
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Step 5 (オプション): Slack通知の設定
|
# Step 4: Mattermost通知の設定
|
||||||
|
|
||||||
1. **Slackプラグイン設定**:
|
1. **Mattermost Webhookの設定**:
|
||||||
- JenkinsにSlack Notification Pluginをインストール
|
- Mattermostの統合機能で「内向きのウェブフック」を選択
|
||||||
- SlackのワークスペースでWebhookを設定し、トークンを取得
|
- 新しいWebhookを作成し、Webhook URLを取得
|
||||||
|
- 通知先のチャンネルを指定
|
||||||
|
|
||||||
2. **Slack通知の追加**:
|
2. **JenkinsのMattermost通知設定**:
|
||||||
- 「ビルド後の処理」→「Slack通知」
|
- Jenkinsのプラグイン管理から「Mattermost Notification」をインストール
|
||||||
- 成功時・失敗時の通知を設定
|
- ジョブの「ビルド後の処理」で「Mattermost Notifications」を追加し、Webhook URLや通知内容を設定
|
||||||
|
- EndpointがWebhook URLでProject Channelは通知送信先チャンネル名
|
||||||
|
|
||||||
3. **通知の確認**:
|
3. **通知の確認**:
|
||||||
- ビルド実行後、Slackに通知が届くことを確認
|
- ビルド実行後、Mattermostに通知が届くことを確認
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# まとめ
|
# まとめ
|
||||||
|
|
||||||
- JenkinsでCI/CDの基本フローを体験
|
- Jenkins、Gitea、Mattermostを使ったCI/CDの基本フローを体験
|
||||||
- 手動ジョブ作成、Gitリポジトリ連携、自動テスト、デプロイ、通知
|
- 手動ジョブ作成、Giteaリポジトリ連携、自動テスト、デプロイ、通知
|
||||||
- CI/CDの自動化とそのメリットを理解
|
- CI/CDの自動化とそのメリットを理解
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# お疲れ様でした!
|
# お疲れ様でした!
|
||||||
|
|
||||||
- Jenkinsの基本操作を学べましたか?
|
CI/CDにぜひ挑戦してみてください!
|
||||||
- 継続的インテグレーションとデリバリーの流れを理解できましたか?
|
|
||||||
|
|
||||||
Jenkinsを使ったCI/CDにぜひ挑戦してみてください!
|
|
||||||
|
5
docker/Dockerfile.jenkins
Normal file
5
docker/Dockerfile.jenkins
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
FROM jenkins/jenkins:lts
|
||||||
|
|
||||||
|
USER root
|
||||||
|
RUN apt-get update && apt-get install -y python3 python3-pip
|
||||||
|
USER jenkins
|
@ -1,7 +1,10 @@
|
|||||||
services:
|
services:
|
||||||
jenkins1:
|
jenkins1:
|
||||||
|
build:
|
||||||
|
dockerfile: Dockerfile.jenkins
|
||||||
image: jenkins/jenkins:lts
|
image: jenkins/jenkins:lts
|
||||||
container_name: jenkins1
|
container_name: jenkins1
|
||||||
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- "8081:8080"
|
- "8081:8080"
|
||||||
volumes:
|
volumes:
|
||||||
@ -10,12 +13,16 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- JENKINS_USER=admin
|
- JENKINS_USER=admin
|
||||||
- JENKINS_PASS=password
|
- JENKINS_PASS=password
|
||||||
|
- TZ=Asia/Tokyo
|
||||||
networks:
|
networks:
|
||||||
- jenkins_network
|
- jenkins_network
|
||||||
|
|
||||||
jenkins2:
|
jenkins2:
|
||||||
|
build:
|
||||||
|
dockerfile: Dockerfile.jenkins
|
||||||
image: jenkins/jenkins:lts
|
image: jenkins/jenkins:lts
|
||||||
container_name: jenkins2
|
container_name: jenkins2
|
||||||
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- "8082:8080"
|
- "8082:8080"
|
||||||
volumes:
|
volumes:
|
||||||
@ -24,12 +31,16 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- JENKINS_USER=admin
|
- JENKINS_USER=admin
|
||||||
- JENKINS_PASS=password
|
- JENKINS_PASS=password
|
||||||
|
- TZ=Asia/Tokyo
|
||||||
networks:
|
networks:
|
||||||
- jenkins_network
|
- jenkins_network
|
||||||
|
|
||||||
jenkins3:
|
jenkins3:
|
||||||
|
build:
|
||||||
|
dockerfile: Dockerfile.jenkins
|
||||||
image: jenkins/jenkins:lts
|
image: jenkins/jenkins:lts
|
||||||
container_name: jenkins3
|
container_name: jenkins3
|
||||||
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- "8083:8080"
|
- "8083:8080"
|
||||||
volumes:
|
volumes:
|
||||||
@ -38,12 +49,16 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- JENKINS_USER=admin
|
- JENKINS_USER=admin
|
||||||
- JENKINS_PASS=password
|
- JENKINS_PASS=password
|
||||||
|
- TZ=Asia/Tokyo
|
||||||
networks:
|
networks:
|
||||||
- jenkins_network
|
- jenkins_network
|
||||||
|
|
||||||
jenkins4:
|
jenkins4:
|
||||||
|
build:
|
||||||
|
dockerfile: Dockerfile.jenkins
|
||||||
image: jenkins/jenkins:lts
|
image: jenkins/jenkins:lts
|
||||||
container_name: jenkins4
|
container_name: jenkins4
|
||||||
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- "8084:8080"
|
- "8084:8080"
|
||||||
volumes:
|
volumes:
|
||||||
@ -52,12 +67,16 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- JENKINS_USER=admin
|
- JENKINS_USER=admin
|
||||||
- JENKINS_PASS=password
|
- JENKINS_PASS=password
|
||||||
|
- TZ=Asia/Tokyo
|
||||||
networks:
|
networks:
|
||||||
- jenkins_network
|
- jenkins_network
|
||||||
|
|
||||||
jenkins5:
|
jenkins5:
|
||||||
|
build:
|
||||||
|
dockerfile: Dockerfile.jenkins
|
||||||
image: jenkins/jenkins:lts
|
image: jenkins/jenkins:lts
|
||||||
container_name: jenkins5
|
container_name: jenkins5
|
||||||
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- "8085:8080"
|
- "8085:8080"
|
||||||
volumes:
|
volumes:
|
||||||
@ -66,6 +85,59 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- JENKINS_USER=admin
|
- JENKINS_USER=admin
|
||||||
- JENKINS_PASS=password
|
- JENKINS_PASS=password
|
||||||
|
- TZ=Asia/Tokyo
|
||||||
|
networks:
|
||||||
|
- jenkins_network
|
||||||
|
|
||||||
|
gitea:
|
||||||
|
image: gitea/gitea:latest
|
||||||
|
container_name: gitea
|
||||||
|
environment:
|
||||||
|
- USER_UID=1000
|
||||||
|
- USER_GID=1000
|
||||||
|
- GITEA__database__DB_TYPE=sqlite3
|
||||||
|
- GITEA__database__PATH=/data/gitea/gitea.db
|
||||||
|
- GITEA__server__ROOT_URL=http://192.168.36.39:3000/
|
||||||
|
- GITEA__service__ALLOW_ONLY_EXTERNAL_REGISTRATION=false
|
||||||
|
- GITEA__service__DISABLE_REGISTRATION_EMAIL_CONFIRMATION=true
|
||||||
|
- GITEA__webhook__ALLOWED_HOST_LIST=192.168.36.39
|
||||||
|
- TZ=Asia/Tokyo
|
||||||
|
ports:
|
||||||
|
- "3000:3000"
|
||||||
|
- "2222:22"
|
||||||
|
volumes:
|
||||||
|
- ./volume/gitea_data:/data
|
||||||
|
networks:
|
||||||
|
- jenkins_network
|
||||||
|
|
||||||
|
mattermost:
|
||||||
|
image: mattermost/mattermost-team-edition:latest
|
||||||
|
container_name: mattermost
|
||||||
|
environment:
|
||||||
|
- MM_SQLSETTINGS_DRIVERNAME=mysql
|
||||||
|
- MM_SQLSETTINGS_DATASOURCE=mattermost:mattermost@tcp(mysql:3306)/mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s
|
||||||
|
- MM_SERVICESETTINGS_SITEURL=http://192.168.36.39:4000
|
||||||
|
- MM_SERVICESETTINGS_DEFAULTLOCALE=ja
|
||||||
|
- MM_EMAILSETTINGS_REQUIREEMAILVERIFICATION=false
|
||||||
|
- TZ=Asia/Tokyo
|
||||||
|
ports:
|
||||||
|
- "4000:8065"
|
||||||
|
volumes:
|
||||||
|
- ./volume/mattermost_data:/mattermost/data
|
||||||
|
networks:
|
||||||
|
- jenkins_network
|
||||||
|
|
||||||
|
mysql:
|
||||||
|
image: mysql:8.0
|
||||||
|
container_name: mysql
|
||||||
|
environment:
|
||||||
|
- MYSQL_ROOT_PASSWORD=password
|
||||||
|
- MYSQL_DATABASE=mattermost
|
||||||
|
- MYSQL_USER=mattermost
|
||||||
|
- MYSQL_PASSWORD=mattermost
|
||||||
|
- TZ=Asia/Tokyo
|
||||||
|
volumes:
|
||||||
|
- ./volume/mysql_data:/var/lib/mysql
|
||||||
networks:
|
networks:
|
||||||
- jenkins_network
|
- jenkins_network
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user