CentOS 7にビルドボットをインストールして構成する方法

Buildbotは、オープンソースのPythonベースの継続的統合ツールであり、ソフトウェアの構築、テスト、導入を自動化します。Buildbotは、1つ以上のBuildbotマスターと多数のワーカーで構成されています。BuildbotマスターまたはBuildmasterは、システムの中心的なコマンドを持っています。ビルド環境とワーカーの管理を担当し、ワーカーへのジョブの送信に関するすべての決定を行います。Buildmasterはコードリポジトリの変更を検出し、コマンドまたはジョブをワーカーに送信して実行します。ワーカーはジョブを実行し、結果をビルドマスターに返します。次に、Buildmasterは複数のサポートされているチャネルを通じて開発者に通知します。このチュートリアルでは、CentOS 7にBuildbotマスターとワーカーをインストールします。また、認証とNginxを安全なリバースプロキシとして構成します。

前提条件

  • 1GB以上のRAMを備えたVultr CentOS 7サーバーインスタンス。
  • sudoのユーザー
  • サーバーに向けられた登録済みドメイン名。

このチュートリアルでは192.168.1.1、パブリックIPアドレスおよびci.example.comVultrインスタンスを指すドメイン名として使用します。サンプルのドメイン名とIPアドレスをすべて実際のものに置き換えてください。

CentOS 7のアップデート方法ガイドを使用して、ベースシステムをアップデートします。システムが更新されたら、PostgreSQLのインストールに進みます。

Python依存関係をインストールする

PythonのパッケージマネージャーであるPipをインストールします。

sudo yum -y install epel-release
sudo yum -y install python-pip gcc python-devel git
sudo pip install --upgrade pip

PostgreSQLをインストールする

Buildbotは、MySQL、PostgreSQL、SQLiteなど、複数のタイプのデータベースサーバーをサポートしています。このチュートリアルでは、PostgreSQLを使用してBuildbotデータベースサーバーをホストします。

PostgreSQLは、オブジェクトリレーショナルデータベースシステムであり、その安定性と速度で知られています。デフォルトのyumリポジトリには古いバージョンのPostgreSQLが含まれているため、PostgreSQLリポジトリを追加します。

sudo yum -y install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-1.noarch.rpm

PostgreSQLデータベースサーバーをインストールします。

sudo yum -y install postgresql10-server postgresql10-contrib postgresql10 

データベースを初期化します。

sudo /usr/pgsql-10/bin/postgresql-10-setup initdb

PostgreSQLサーバーを起動し、起動時に自動的に起動するようにします。

sudo systemctl start postgresql-10
sudo systemctl enable postgresql-10

デフォルトのPostgreSQLユーザーのパスワードを変更します。

sudo passwd postgres

PostgreSQLユーザーとしてログインします。

sudo su - postgres

Buildbotの新しいPostgreSQLユーザーを作成します。

createuser bb_user

bb_user必要に応じて、の代わりに任意のユーザー名を使用できます。PostgreSQLは、psqlデータベースでクエリを実行するためのシェルを提供します。PostgreSQLシェルに切り替えます。

psql

新しく作成したユーザーのパスワードを設定します。

ALTER USER bb_user WITH ENCRYPTED password 'DBPassword';

DBPassword安全なパスワードに置き換えます。

Buildbotインストール用の新しいデータベースを作成します。

CREATE DATABASE buildbot OWNER bb_user;

psqlシェルを終了します。

\q

sudoユーザーに切り替えます。

exit

pg_hba.confファイルを編集して、MD5ベースの認証を有効にします。

sudo nano /var/lib/pgsql/10/data/pg_hba.conf

次の行を見つけて、値を変更peerしてident、中METHOD列、へtrustmd5それぞれ。

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident

更新すると、構成は次のテキストのようになります。

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

ファイルを保存してエディターを終了します。Python用のPostgreSQLデータベースアダプターをインストールします。

sudo pip install psycopg2

PostgreSQLを再起動して、変更を有効にします。

sudo systemctl restart postgresql-10

Buildbotをインストールする

Pipを使用してBuildbotをインストールします。

sudo pip install 'buildbot[bundle]' pyopenssl service_identity

上記のコマンドはbuildbot-www、Buildbotを、、、buildbot-workerおよびなどのいくつかのWebプラグインとともにインストールしbuildbot-waterfall-viewます。

Buildbotが正常にインストールされたことを確認するには、Buildbotのバージョンを確認して確認できます。

buildbot --version

出力は次のテキストのようになります。

[user@vultr ~]$ buildbot --version
Buildbot version: 0.9.15.post1
Twisted version: 17.9.0

ポートを許可するようにファイアウォールルールを変更します8010。Buildbotはこのポートを使用してWebリクエストをリッスンします。

sudo firewall-cmd --zone=public --add-port=8010/tcp --permanent
sudo firewall-cmd --reload

Buildbot Masterを構成する

Buildbotのマスタープロセスとワーカープロセスを実行するための新しい非特権ユーザーを作成します。Buildbotマスターサービスをrootユーザーとして実行することはお勧めしません。

sudo adduser buildbot
sudo passwd buildbot

新しく作成したbuildbotユーザーとしてログインします。

sudo su - buildbot

Buildbotマスターを/home/buildbot/masterディレクトリに設定します。このディレクトリには、各ビルドの構成、ステータス、ログファイルが含まれます。

buildbot create-master --db 'postgresql://bb_user:DBPassword@localhost/buildbot' ~/master

上記のコマンドで、データベースユーザーの資格情報を必ず置き換えてください。

注: PostgreSQLの代わりにSQLiteデータベースを使用する場合は、--db 'postgresql://bb_user:DBpassword@localhost/buildbot'オプションを省略してください。SQLiteデータベースは同じディレクトリに作成されます。

上記のコマンドは~/master、Buildmasterファイルを格納するディレクトリを作成します。また、PostgreSQLデータベースにデータを書き込みます。次の出力が表示されます。

[buildbot@vultr ~]$ buildbot create-master --db 'postgresql://bb_user:DBPassword@localhost/buildbot' ~/master
mkdir /home/buildbot/master
creating /home/buildbot/master/master.cfg.sample
creating database (postgresql://bb_user:DBPassword@localhost/buildbot)
buildmaster configured in /home/buildbot/master

サンプル構成ファイルをライブ構成ファイルにコピーします。

cp ~/master/master.cfg.sample ~/master/master.cfg

構成ファイルを編集します。

nano ~/master/master.cfg

次の行を見つけます。

c['workers'] = [worker.Worker("example-worker", "pass")]
...

c['builders'].append(
    util.BuilderConfig(name="runtests",
      workernames=["example-worker"],
      factory=factory))
...

c['title'] = "Hello World CI"
c['titleURL'] = "https://buildbot.github.io/hello-world/"
...

c['buildbotURL'] = "http://localhost:8010/"
...

c['db'] = {
    'db_url' : "postgresql://bb_user:DBpassword@localhost/buildbot",
}

上記の構成には、サンプルワーカーのエントリがあります。実行するワーカーのサンプルエントリを変更しlocalhostます。をワーカーにexample-worker適した名前にlocalhost変更し、passを他のパスワードに変更します。チュートリアルの後半で必要になるので、ワーカー名とパスワードを書き留めます。ビルダーのリストでワーカーの名前を変更します。必要に応じて、アプリケーションの名前とプロジェクトのURLを変更します。

Buildbot URLをlocalhost実際のドメイン名またはパブリックIPアドレスに変更します。また、構成ファイルのデータベース情報が実際のデータベース資格情報と一致していることを確認してください。

ファイルの最後にを追加しc['buildbotNetUsageData'] = Noneます。このパラメーターは、ソフトウェアバージョン情報とプラグインの使用状況の詳細の開発者への送信を無効にします。ただし、使用情報の送信を有効にするには、オプションをに変更しますFull

構成は次のテキストのようになります。

c['workers'] = [worker.Worker("localhost-worker", "Password123")]
...    

c['builders'].append(
    util.BuilderConfig(name="runtests",
      workernames=["localhost-worker"],
      factory=factory))
...

c['title'] = "My Application CI"
c['titleURL'] = "https://example.com/my-app"
...

c['buildbotURL'] = "http://192.168.1.1:8010/"
...

c['db'] = {
    'db_url' : "postgresql://bb_user:DBpassword@localhost/buildbot",
}
...

c['buildbotNetUsageData'] = None

ファイルを保存してエディターを終了します。エラーがないか構成ファイルを確認してください。

buildbot checkconfig ~/master

構成ファイルにエラーがない場合は、次の出力が表示されます。

[buildbot@vultr ~]$ buildbot checkconfig ~/master
Config file is good!

すべてが正しく構成されたので、Buildbotマスターを開始できます。

buildbot start ~/master

次の出力が表示されます。

[buildbot@vultr ~]$ buildbot start ~/master
Following twistd.log until startup finished..
The buildmaster appears to have (re)started correctly.

Buildbotマスターが正しく起動したので、Webユーザーインターフェイスにからアクセスできますhttp://192.168.1.1:8010。次のBuildbotインターフェースが表示されます。

CentOS 7にビルドボットをインストールして構成する方法

Buildbot Workerを構成する

でワーカー設定をすでに変更し~/master/master.cfgているため、新しいワーカーの作成に進むことができます。

buildbot-worker create-worker ~/worker localhost localhost-worker Password123

~/master/master.cfgファイルに記載されているのとまったく同じワーカー名とパスワードを使用していることを確認してください。ワーカーの名前またはパスワードが一致しない場合、ワーカーはBuildbotマスターに接続できません。正常に実行されると、次の出力が表示されます。

[buildbot@vultr ~]$ buildbot-worker create-worker ~/worker localhost example-worker pass
mkdir /home/buildbot/worker
mkdir /home/buildbot/worker/info
Creating info/admin, you need to edit it appropriately.
Creating info/host, you need to edit it appropriately.
Not creating info/access_uri - add it if you wish
Please edit the files in /home/buildbot/worker/info appropriately.
worker configured in /home/buildbot/worker

ワーカーに関する情報は/infoディレクトリに保存されます。開発者に関する管理情報を編集します。

nano ~/worker/info/admin

例の名前を実際の名前と電子メールに置き換えます。

Your Name <[email protected]>

次に、ホストに関する情報を含むファイルを開きます。

nano ~/worker/info/host

例の命令をホストシステムに関する実際の情報に置き換えます。

Localhost, CentOS 7

ワーカーの管理者とホストの情報は、システムについてユーザーに知らせるためにのみ使用されます。BuildbotバージョンやTwistedバージョンなど、システムに関する追加情報を追加することもできます。

ワーカーを開始します。

buildbot-worker start ~/worker

出力は次のテキストのようになります。

[buildbot@vultr ~]$ buildbot-worker start ~/worker
Following twistd.log until startup finished..
The buildbot-worker appears to have (re)started correctly.

ワーカーが登録されているかどうかを確認するには、Buildbotのウェブインターフェースに移動しBuilds >> Workers、左側のナビゲーションからに移動します。ワーカーが稼働し、構築する準備ができていることがわかります。

CentOS 7にビルドボットをインストールして構成する方法

サンプルビルドを実行し、Buildbotワーカーが正常に実行されているかどうかを確認するには、に移動しBuilds >> Buildersます。runtestsビルダー名をクリックしてビルダーインターフェイスを開き、Forceボタンをクリックして強制的にビルドします。名前を入力し、Start Buildボタンをクリックしてビルドを開始します。これはBuildbot環境を確認するためのサンプルビルドテストであるため、数秒で完了します。成功メッセージとビルド結果が表示されます。

CentOS 7にビルドボットをインストールして構成する方法

Systemdサービスのセットアップ

Buildbotマスターとワーカーは上記のコマンドを使用して簡単に開始できますが、Buildbotサービスの実行と管理にはSystemdユニットを使用することをお勧めします。これにより、システムの再起動や障害時に自動的に開始されます。

注: またはを実行して、sudoユーザーに再度切り替えます。これからは、すべてのコマンドをユーザーが実行する必要があります。exitsu <username>sudo

実行中のBuildbotワーカーとマスターサービスを停止します。

sudo su buildbot -c "buildbot stop /home/buildbot/master" 
sudo su buildbot -c "buildbot-worker stop ~/worker"

Buildbotマスター用の新しいSystemdユニットファイルを作成します。

sudo nano /etc/systemd/system/buildbot.service

ファイルに入力します。

[Unit]
Description=BuildBot master service 
After=network.target

[Service]
Type=forking
User=buildbot 
Group=buildbot 
WorkingDirectory=/home/buildbot/master 
ExecStart=/usr/bin/buildbot start
ExecStop=/usr/bin/buildbot stop
ExecReload=/usr/bin/buildbot restart

[Install]
WantedBy=multi-user.target

Buildbotマスターを起動し、起動時に自動的に起動するようにします。

sudo systemctl start buildbot
sudo systemctl enable buildbot

Buildbotワーカー用の新しいSystemdユニットファイルを作成します。

sudo nano /etc/systemd/system/buildbot-worker.service

ファイルに入力します。

[Unit]
Description=BuildBot worker service
After=network.target

[Service]
Type=forking
User=buildbot
Group=buildbot
WorkingDirectory=/home/buildbot/worker
ExecStart=/usr/bin/buildbot-worker start
ExecStop=/usr/bin/buildbot-worker stop
ExecReload=/usr/bin/buildbot-worker restart

[Install]
WantedBy=multi-user.target

Buildbotワーカーを起動し、起動時に自動的に起動するようにします。

sudo systemctl start buildbot-worker
sudo systemctl enable buildbot-worker

サービスの状態を確認できます。

sudo systemctl status buildbot buildbot-worker

サービスがスムーズに実行されている場合は、出力にそれが表示されます。

[user@vultr ~]$ sudo systemctl status buildbot buildbot-worker
● buildbot.service - BuildBot master service
...
Active: active (running) since Fri 2018-01-12 16:00:59 UTC; 1min 25s ago
...
Jan 12 16:00:59 vultr.guest systemd[1]: Started BuildBot master service.

● buildbot-worker.service - BuildBot worker service
...
Active: active (running) since Fri 2018-01-12 16:02:00 UTC; 24s ago
...
Jan 12 16:02:00 vultr.guest systemd[1]: Started BuildBot worker service.

認証を有効にする

デフォルトでは、Buildbot Webインターフェースで認証は有効になっていません。インターネットに接続しているサイトの場合は、認証をセットアップして、許可されたユーザーのみが管理タスクを実行できるようにすることを強くお勧めします。認証をセットアップするには、Buildbotマスター構成ファイルを再度開きます。

sudo su buildbot -c "nano /home/buildbot/master/master.cfg"

ファイルの最後に次の行を追加します。

c['www']['authz'] = util.Authz(
       allowRules = [
           util.AnyEndpointMatcher(role="admins")
       ],
       roleMatchers = [
           util.RolesFromUsername(roles=['admins'], usernames=['admin_user'])
       ]
)
c['www']['auth'] = util.UserPasswordAuth({'admin_user': 'AdminPassword'})

の両方admin_userを、使用する実際のユーザー名とAdminPassword強力なパスワードに置き換えます。

構成ファイルのエラーを確認してください。

sudo su buildbot -c "buildbot checkconfig /home/buildbot/master"

Buildbotマスターサービスを再起動して、変更を有効にします。

sudo systemctl restart buildbot

Webインターフェースをもう一度参照して、匿名ユーザーがビルドサーバーの基本的な詳細しか表示できないことを確認します。ここで、master.cfgファイルに設定された資格情報を使用してログインすると、他のすべての管理機能は、ログインした管理者ユーザーのみが使用できることがわかります。

Let's Encrypt SSLによるBuildbotの保護

デフォルトでは、Buildbotは保護さ8010れていない接続でポートをリッスンします。HTTPSブラウザからサーバーへの転送中にデータが安全であることを保証するために、でWebインターフェイスを保護することをお勧めします。チュートリアルのこのセクションでは、無料のSSL証明書であるLet's Encryptを使用してNginxをインストールし、保護します。Nginxウェブサーバーは、受信リクエストをBuildbotのHTTPエンドポイントに転送するリバースプロキシとして機能します。

Nginxをインストールします。

sudo yum -y install nginx

Nginxを起動し、起動時に自動的に起動するようにします。

sudo systemctl start nginx
sudo systemctl enable nginx

Let's Encrypt CAのクライアントアプリケーションであるCertbotをインストールします。

sudo yum -y install certbot

証明書を要求する前に、ポート80および443/または標準HTTPHTTPSサービスがファイアウォールを通過できるようにする必要があります。また、8010保護されていない接続をリッスンするポートを削除します。

sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --zone=public --remove-port=8010/tcp --permanent
sudo firewall-cmd --reload

注: Let's Encrypt CAから証明書を取得するには、証明書を生成するドメインをサーバーに向ける必要があります。そうでない場合は、ドメインのDNSレコードに必要な変更を加え、DNSが伝播するのを待ってから、証明書要求を再度行ってください。証明書ボットは、証明書を提供する前にドメイン認証局をチェックします。

SSL証明書を生成します。

sudo certbot certonly --webroot -w /usr/share/nginx/html -d ci.example.com

生成された証明書は、/etc/letsencrypt/live/ci.example.com/ディレクトリに格納される可能性があります。SSL証明書はとして保存されfullchain.pem、秘密鍵はとして保存されprivkey.pemます。

Let's Encrypt証明書は90日で期限切れになるため、cronジョブを使用して証明書の自動更新を設定することをお勧めします。

rootユーザーのcronジョブファイルを開きます。

sudo crontab -e

ファイルの最後に次の行を追加します。

30 5 * * * /usr/bin/certbot renew --quiet

上記のcronジョブは、毎日午前5時30分に実行されます。証明書の有効期限が切れる場合は、自動的に更新されます。

次に、Nginxのデフォルト構成ファイルを変更して、default_server行を削除します。

sudo sed -i 's/default_server//g' /etc/nginx/nginx.conf

Buildbot Webインターフェース用の新しい構成ファイルを作成します。

sudo nano /etc/nginx/conf.d/buildbot.conf

ファイルに入力します。

upstream buildbot {
server 127.0.0.1:8010;
}

server {
    listen 80 default_server;
    server_name ci.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2 default_server;
    server_name ci.example.com;

    root html;
    index index.html index.htm;

    ssl on;
    ssl_certificate         /etc/letsencrypt/live/ci.example.com/fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/ci.example.com/privkey.pem;

    ssl_session_cache      shared:SSL:10m;
    ssl_session_timeout  1440m;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;

    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";

    access_log  /var/log/nginx/buildbot.access.log;

    proxy_set_header HOST $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto  $scheme;
    proxy_set_header X-Forwarded-Server  $host;
    proxy_set_header X-Forwarded-Host  $host;

    location / {
        proxy_pass http://buildbot;
    }
    location /sse/ {
        proxy_buffering off;
        proxy_pass http://buildbot/sse/;
    }
    location /ws {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_pass http://buildbot/ws;
        proxy_read_timeout 6000s;
    }
}

新しい構成ファイルのエラーを確認します。

sudo nginx -t

次の出力が表示された場合、構成にエラーはありません。

[user@vultr ~]$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

何らかのエラーを受け取った場合は、SSL証明書へのパスを再確認してください。Nginx Webサーバーを再起動して、構成の変更を実装します。

sudo systemctl restart nginx

Buildmaster構成ファイルを開きます。

sudo su buildbot -c "nano /home/buildbot/master/master.cfg"

次の行を見つけます。

c['buildbotURL'] = "http://192.168.1.1:8010/"

使用しているドメイン名に応じてURLを変更してください。

c['buildbotURL'] = "https://ci.example.com/"

Buildbotマスターサービスを再起動します。

sudo systemctl restart buildbot

これで、Buildbotダッシュボードにアクセスできますhttps://ci.example.com。Buildbotへの接続がSSLで保護されていることがわかります。

CentOS 7にビルドボットをインストールして構成する方法

管理者の資格情報を使用してログインし、最初のパイプラインを追加して、アプリケーションの構築を開始します。



Leave a Comment

CentOS 7にApacheをインストールする方法

CentOS 7にApacheをインストールする方法

CentOS 7サーバーにApache 2.4をインストールする方法を説明します。安定したウェブサーバーを構築するための前提条件と手順を解説します。

FreeBSD 11.1にBlacklistdをインストールする方法

FreeBSD 11.1にBlacklistdをインストールする方法

FreeBSD 11.1におけるBlacklistdのインストール方法について詳しく解説します。この方法を通じて、強力なセキュリティ対策を実装できます。

Windows Serverのサーバーマネージャーを使用した複数サーバーの管理

Windows Serverのサーバーマネージャーを使用した複数サーバーの管理

サーバーマネージャーを使用して、Windows Serverの管理が向上します。セキュリティリスクを軽減し、効率的な管理を実現します。

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法。Seafile(コミュニティバージョン)は、ownCloudに似た無料のオープンソースファイル同期および共有ソリューションです。

DebianでSnortを設定する方法

DebianでSnortを設定する方法

Snortは無料のネットワーク侵入検知システムです。最新の方法で、SnortをDebianにインストールし、設定する手順を紹介します。ネットワークのセキュリティを強化しましょう。

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールし、ログ管理を行う方法を学びます。

WindowsでhMailServerを使用してメールサーバーを構築する

WindowsでhMailServerを使用してメールサーバーを構築する

WindowsサーバーでWebサイトを実行している場合、電子メールも受信できるようにするためにhMailServerを使用する方法を解説します。

Ubuntu 19.04にFiveMサーバーをインストールする方法

Ubuntu 19.04にFiveMサーバーをインストールする方法

FiveMサーバーをUbuntu 19.04にインストールするための詳細なガイド。必要条件からインストール、起動、トラブルシューティングまで、すべてのステップを含みます。

WsgiDAVを使用してDebian 10にWebDAVをデプロイする

WsgiDAVを使用してDebian 10にWebDAVをデプロイする

Debian 10にWebDAVをデプロイする方法を学び、WsgiDAVとSSL証明書で安全な接続を実現しましょう。

ヘルスケア2021における人工知能の影響

ヘルスケア2021における人工知能の影響

ヘルスケアにおけるAIは、過去数十年から大きな飛躍を遂げました。したがって、ヘルスケアにおけるAIの未来は、日々成長を続けています。