{"id":958,"date":"2017-06-09T08:14:03","date_gmt":"2017-06-09T05:14:03","guid":{"rendered":"https:\/\/community.virtono.com\/?p=958"},"modified":"2017-06-11T08:47:19","modified_gmt":"2017-06-11T05:47:19","slug":"how-to-install-buildbot-on-ubuntu-16-0","status":"publish","type":"post","link":"https:\/\/www.virtono.com\/community\/news-announcements\/how-to-install-buildbot-on-ubuntu-16-0\/","title":{"rendered":"How To Install Buildbot on Ubuntu 16.0"},"content":{"rendered":"<p><b>Introduction<\/b><span style=\"font-weight: 400\"> \u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Buildbot it contains a python-baseb continuous integration system for automating software buid, test, and release processes. For handling asynchronous communication between a buildmaster and one or more workers to facilitate testing builds on multiple platforms it uses Python\u2019s Twisted library.It is very suitable for complex build processes or projects that require their tools to grow with the unique need of the project,and all this happen because Buildbot is highly configurable and makes few assumption about how the build process should work.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Prerequisites<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Here are the following things that would be required for this tutorial:<\/span><\/li>\n<li style=\"font-weight: 400\"><b> An Ubuntu 16.04 server with at least 1 GB of RAM.<\/b><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">Step 1 \u2014 How to install Buildbot<\/span><\/p>\n<p><span style=\"font-weight: 400\">The Python Package is recommended by the Buildbot project for installing Buildbot in order to get the most recent version,fot more of it\u2019s releases you can go to Ubuntu packages.<\/span><\/p>\n<p><span style=\"font-weight: 400\">We\u2019ll begin as our\u00a0<\/span><span style=\"font-weight: 400\">sudo<\/span><span style=\"font-weight: 400\">\u00a0user, and use\u00a0<\/span><span style=\"font-weight: 400\">apt-get update<\/span><span style=\"font-weight: 400\">\u00a0to ensure we have the latest list of packages:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">sudo apt-get update<\/span><\/li>\n<li style=\"font-weight: 400\"><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Then, we\u2019ll install pip itself:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">sudo apt-get install python-pi<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\"> You can install the Buildbot bundle,after the pip is avaible<\/span><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Once pip is available, we&#8217;ll use it to install the Buildbot bundle, which includes the master and worker as well as other dependencies, including those required by the web interface. Pip creates\u00a0<\/span><span style=\"font-weight: 400\">.cache<\/span><span style=\"font-weight: 400\">\u00a0files in the home directory of the user who executes it. We&#8217;ll use\u00a0<\/span><span style=\"font-weight: 400\">sudo<\/span><span style=\"font-weight: 400\">&#8216;s\u00a0<\/span><span style=\"font-weight: 400\">-H<\/span><span style=\"font-weight: 400\">\u00a0flag to put these files in the right location:<\/span><\/li>\n<\/ul>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">sudo -H pip install &#8216;buildbot[bundle]&#8217;<\/span><\/li>\n<li style=\"font-weight: 400\"><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Depending on the speed of your server, this may take a little bit to complete. The end of the output from a successful installation should look something like the following:<\/span><\/p>\n<p><span style=\"font-weight: 400\">Output<\/span><\/p>\n<p><span style=\"font-weight: 400\">Successfully installed Automat-0.5.0 Jinja2-2.9.6 MarkupSafe-1.0 <\/span><\/p>\n<p><span style=\"font-weight: 400\">PyJWT-1.5.0 Tempita-0.5.2 Twisted-17.1.0 attrs-16.3.0 autobahn-17.5.1 <\/span><\/p>\n<p><span style=\"font-weight: 400\">buildbot-0.9.6 buildbot-console-view-0.9.6 buildbot-waterfall-view-0.9.6 <\/span><\/p>\n<p><span style=\"font-weight: 400\">buildbot-worker-0.9.6 buildbot-www-0.9.6 constantly-15.1.0 <\/span><\/p>\n<p><span style=\"font-weight: 400\">decorator-4.0.11 future-0.16.0 incremental-16.10.1 pbr-3.0.0 <\/span><\/p>\n<p><span style=\"font-weight: 400\">python-dateutil-2.6.0 six-1.10.0 sqlalchemy-1.1.9 <\/span><\/p>\n<p><span style=\"font-weight: 400\">sqlalchemy-migrate-0.11.0 sqlparse-0.2.3 txaio-2.7.1 zope.interface-4.4.0<\/span><\/p>\n<p><span style=\"font-weight: 400\">It may also display a recommendation to upgrade pip itself:<\/span><\/p>\n<p><span style=\"font-weight: 400\">Output<\/span><\/p>\n<p><span style=\"font-weight: 400\">. . .<\/span><\/p>\n<p><span style=\"font-weight: 400\">You are using pip version 8.1.1, however version 9.0.1 is available.<\/span><\/p>\n<p><span style=\"font-weight: 400\">You should consider upgrading via the &#8216;pip install &#8211;upgrade pip&#8217; command.<\/span><\/p>\n<p><span style=\"font-weight: 400\">While this won&#8217;t affect our Buildbot installation, we&#8217;ll take a moment to upgrade to pip&#8217;s latest release:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">sudo -H pip install &#8211;upgrade pip<\/span><\/li>\n<li style=\"font-weight: 400\"><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Output<\/span><\/p>\n<p><span style=\"font-weight: 400\">Collecting pip<\/span><\/p>\n<p><span style=\"font-weight: 400\"> Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB)<\/span><\/p>\n<p><span style=\"font-weight: 400\"> \u00a0\u00a0100% |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 1.3MB 768kB\/s<\/span><\/p>\n<p><span style=\"font-weight: 400\">Installing collected packages: pip<\/span><\/p>\n<p><span style=\"font-weight: 400\"> Found existing installation: pip 8.1.1<\/span><\/p>\n<p><span style=\"font-weight: 400\"> \u00a0\u00a0Not uninstalling pip at \/usr\/lib\/python2.7\/dist-packages, outside environment \/usr<\/span><\/p>\n<p><span style=\"font-weight: 400\">Successfully installed pip-9.0.1<\/span><\/p>\n<p><span style=\"font-weight: 400\">Finally, we\u2019ll verify the installation of Buildbot by checking the version:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">buildbot &#8211;version<\/span><\/li>\n<li style=\"font-weight: 400\"><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Output<\/span><\/p>\n<p><span style=\"font-weight: 400\">Buildbot version: 0.9.6<\/span><\/p>\n<p><span style=\"font-weight: 400\">Twisted version: 17.1.0<\/span><\/p>\n<p><span style=\"font-weight: 400\">In the tutorial prerequisite, we configured a UFW firewall to allow SSH traffic only. We&#8217;ll verify the status:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">sudo ufw status<\/span><\/li>\n<li style=\"font-weight: 400\"><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Output<\/span><\/p>\n<p><span style=\"font-weight: 400\">Status: active<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">To \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Action \u00a0\u00a0\u00a0\u00a0\u00a0From<\/span><\/p>\n<p><span style=\"font-weight: 400\">&#8212; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&#8212;&#8212; \u00a0\u00a0\u00a0\u00a0\u00a0&#8212;-<\/span><\/p>\n<p><span style=\"font-weight: 400\">OpenSSH \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ALLOW \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Anywhere<\/span><\/p>\n<p><span style=\"font-weight: 400\">OpenSSH (v6) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0ALLOW \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Anywhere (v6)<\/span><\/p>\n<p><span style=\"font-weight: 400\">Buildbot uses port 8010 for the web interface, which isn&#8217;t allowed, so we&#8217;ll open that now.<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">sudo ufw allow 8010<\/span><\/li>\n<li style=\"font-weight: 400\"><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Then, we&#8217;ll add a dedicated system user and group to run the Buildbot services:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">sudo addgroup &#8211;system buildbot<\/span><\/li>\n<li style=\"font-weight: 400\"><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">sudo adduser buildbot &#8211;system &#8211;ingroup buildbot &#8211;shell \/bin\/bash<\/span><\/li>\n<li style=\"font-weight: 400\"><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Finally, we&#8217;ll log in as our new user to install Buildbot:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">sudo &#8211;login &#8211;user buildbot<\/span><\/li>\n<li style=\"font-weight: 400\"><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">This will log us in as the\u00a0<\/span><span style=\"font-weight: 400\">buildbot<\/span><span style=\"font-weight: 400\">\u00a0user and place us in the\u00a0<\/span><span style=\"font-weight: 400\">\/home\/buildbot<\/span><span style=\"font-weight: 400\">\u00a0directory, where we&#8217;ll configure our master and worker:<\/span><\/p>\n<p><span style=\"font-weight: 400\">Step 2 \u2014 The following steps show\u2019s how to configure master<\/span><\/p>\n<p><span style=\"font-weight: 400\">We&#8217;ll use the the buildbot command\u00a0<\/span><span style=\"font-weight: 400\">create-master<\/span><span style=\"font-weight: 400\">\u00a0followed by the value of the base directory:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">buildbot create-master master<\/span><\/li>\n<li style=\"font-weight: 400\"><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Output<\/span><\/p>\n<p><span style=\"font-weight: 400\">mkdir \/home\/buildbot\/master<\/span><\/p>\n<p><span style=\"font-weight: 400\">creating \/home\/buildbot\/master\/master.cfg.sample<\/span><\/p>\n<p><span style=\"font-weight: 400\">creating database (sqlite:\/\/\/state.sqlite)<\/span><\/p>\n<p><span style=\"font-weight: 400\">buildmaster configured in \/home\/buildbot\/master<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">Next we&#8217;ll copy\u00a0<\/span><span style=\"font-weight: 400\">master.cfg.sample<\/span><span style=\"font-weight: 400\">\u00a0to\u00a0<\/span><span style=\"font-weight: 400\">master.cfg<\/span><span style=\"font-weight: 400\">\u00a0and leave the original in place for reference:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">cp ~\/master\/master.cfg.sample ~\/master\/master.cfg<\/span><\/li>\n<li style=\"font-weight: 400\"><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Then, we&#8217;ll edit the file to allow us to reach the web interface from a local machine.<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">nano ~\/master\/master.cfg<\/span><\/li>\n<li style=\"font-weight: 400\"><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">In order to access the web interface from a desktop or other device, we&#8217;ll change the\u00a0<\/span><span style=\"font-weight: 400\">buildbotURL<\/span><span style=\"font-weight: 400\">\u00a0from\u00a0<\/span><span style=\"font-weight: 400\">localhost<\/span><span style=\"font-weight: 400\">\u00a0to the IP address or domain name of the server. Other important configuration values are set in\u00a0<\/span><span style=\"font-weight: 400\">master.cfg<\/span><span style=\"font-weight: 400\">, but we&#8217;re going to keep the rest of the defaults for now.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Near the bottom of the file, locate the\u00a0<\/span><span style=\"font-weight: 400\">buildbotURL<\/span><span style=\"font-weight: 400\">\u00a0line and replace\u00a0<\/span><span style=\"font-weight: 400\">localhost<\/span><span style=\"font-weight: 400\">\u00a0with the IP address or domain name of your site:<\/span><\/p>\n<p><span style=\"font-weight: 400\">~\/master\/master.cfg<\/span><\/p>\n<p><span style=\"font-weight: 400\">c[&#8216;buildbotURL&#8217;] = &#8220;http:\/\/<\/span><span style=\"font-weight: 400\">IP_or_site_domain<\/span><span style=\"font-weight: 400\">:8010\/&#8221;<\/span><\/p>\n<p><b>Note:<\/b><span style=\"font-weight: 400\">\u00a0The\u00a0<\/span><span style=\"font-weight: 400\">master.cfg<\/span><span style=\"font-weight: 400\">\u00a0also pre-defines a worker in the &#8220;Workers&#8221; section.<\/span><\/p>\n<p><span style=\"font-weight: 400\">~\/master\/master.cfg<\/span><\/p>\n<p><span style=\"font-weight: 400\">. . .<\/span><\/p>\n<p><span style=\"font-weight: 400\">####### WORKERS<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\"># The &#8216;workers&#8217; list defines the set of recognized workers. Each element is<\/span><\/p>\n<p><span style=\"font-weight: 400\"># a Worker object, specifying a unique worker name and password. \u00a0The same<\/span><\/p>\n<p><span style=\"font-weight: 400\"># worker name and password must be configured on the worker.<\/span><\/p>\n<p><span style=\"font-weight: 400\">c[&#8216;workers&#8217;] = [worker.Worker(&#8220;example-worker&#8221;, &#8220;pass&#8221;)]<\/span><\/p>\n<p><span style=\"font-weight: 400\">. . .<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">Later in the tutorial, we\u2019ll create a worker with these credentials.<\/span><\/p>\n<p><span style=\"font-weight: 400\">When you\u2019ve modified the\u00a0<\/span><span style=\"font-weight: 400\">&#8216;buildbotURL&#8217;<\/span><span style=\"font-weight: 400\">, save and exit the file, then start the master:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">buildbot start ~\/master<\/span><\/li>\n<li style=\"font-weight: 400\"><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Output<\/span><\/p>\n<p><span style=\"font-weight: 400\">Following twistd.log until startup finished..<\/span><\/p>\n<p><span style=\"font-weight: 400\">The buildmaster appears to have (re)started correctly.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Finally, let\u2019s visit the site in a web browser on port 8010 at the\u00a0<\/span><span style=\"font-weight: 400\">buildbotURL<\/span><span style=\"font-weight: 400\">\u00a0we configured:<\/span><\/p>\n<p><span style=\"font-weight: 400\">http:\/\/<\/span><span style=\"font-weight: 400\">IP_or_site_domain<\/span><span style=\"font-weight: 400\">:8010\/<\/span><\/p>\n<p><span style=\"font-weight: 400\">Now that we have the master running and have verified that we can access the web interface, we\u2019ll create the example worker.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Step 3 \u2014 How to confguire worker<\/span><\/p>\n<p><span style=\"font-weight: 400\">The relationship between a master and a worker is established when a worker&#8217;s name and password in the\u00a0<\/span><span style=\"font-weight: 400\">master.cfg<\/span><span style=\"font-weight: 400\">\u00a0file matches the name and password of a worker configured to use the master.<\/span><\/p>\n<p><span style=\"font-weight: 400\">In this step, we&#8217;ll create and configure a worker by calling\u00a0<\/span><span style=\"font-weight: 400\">buildbot-worker<\/span><span style=\"font-weight: 400\">&#8216;s\u00a0<\/span><span style=\"font-weight: 400\">create-worker<\/span><span style=\"font-weight: 400\">\u00a0command and passing in four settings:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">worker<\/span><span style=\"font-weight: 400\">\u00a0is the name of the directory where the worker&#8217;s settings will be stored<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">localhost<\/span><span style=\"font-weight: 400\">\u00a0is the address where the worker&#8217;s master is running<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">example-worker<\/span><span style=\"font-weight: 400\">\u00a0is the name of the worker and must uniquely identify the worker in the\u00a0<\/span><span style=\"font-weight: 400\">~\/master\/master.cfg<\/span><span style=\"font-weight: 400\">\u00a0file.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">pass<\/span><span style=\"font-weight: 400\">\u00a0is the worker&#8217;s password and this password must match the value in\u00a0<\/span><span style=\"font-weight: 400\">~master\/master.cfg<\/span><span style=\"font-weight: 400\">.<\/span><\/li>\n<\/ul>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">buildbot-worker create-worker worker localhost example-worker pass<\/span><\/li>\n<li style=\"font-weight: 400\"><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Output<\/span><\/p>\n<p><span style=\"font-weight: 400\">mkdir \/home\/buildbot\/worker<\/span><\/p>\n<p><span style=\"font-weight: 400\">mkdir \/home\/buildbot\/worker\/info<\/span><\/p>\n<p><span style=\"font-weight: 400\">Creating info\/admin, you need to edit it appropriately.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Creating info\/host, you need to edit it appropriately.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Not creating info\/access_uri &#8211; add it if you wish<\/span><\/p>\n<p><span style=\"font-weight: 400\">Please edit the files in \/home\/buildbot\/worker\/info appropriately.<\/span><\/p>\n<p><span style=\"font-weight: 400\">worker configured in \/home\/buildbot\/worker<\/span><\/p>\n<p><span style=\"font-weight: 400\">When the worker first connects, it will send files in the\u00a0<\/span><span style=\"font-weight: 400\">info<\/span><span style=\"font-weight: 400\">\u00a0directory to the buildmaster where it runs. They&#8217;ll be displayed in the web interface to give developers more information about test failures.<\/span><\/p>\n<p><span style=\"font-weight: 400\">We&#8217;ll configure these now. First, open the file containing the administrator&#8217;s e-mail, delete the example line,\u00a0<\/span><span style=\"font-weight: 400\">Your Name Here &lt;admin@youraddress.invalid&gt;<\/span><span style=\"font-weight: 400\">\u00a0and replace it with your name and email address.<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">nano ~\/worker\/info\/admin<\/span><\/li>\n<li style=\"font-weight: 400\"><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">~\/worker\/info\/admin<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">When you&#8217;re done, save and exit the file.<\/span><\/p>\n<p><span style=\"font-weight: 400\">The\u00a0<\/span><span style=\"font-weight: 400\">info\/host<\/span><span style=\"font-weight: 400\">\u00a0file, by convention, provides the OS, version, memory size, CPU speed, versions of relevant libraries installed, and finally the Buildbot version running on the worker.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Open the file and paste in the relevant information, updating the sample content as needed for your system:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">nano ~\/worker\/info\/host<\/span><\/li>\n<li style=\"font-weight: 400\"><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Update the information you use to reflect the specifics of your system:<\/span><\/p>\n<p><span style=\"font-weight: 400\">~\/worker\/info\/host<\/span><\/p>\n<p><span style=\"font-weight: 400\">Ubuntu 16.04.2 2GB Droplet &#8211; Buildbot version: 0.9.6 &#8211; Twisted version: 17.1.0<\/span><\/p>\n<p><span style=\"font-weight: 400\">When you&#8217;re done, save and exit. Finally, start the worker:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">buildbot-worker start worker<\/span><\/li>\n<li style=\"font-weight: 400\"><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Output<\/span><\/p>\n<p><span style=\"font-weight: 400\">Following twistd.log until startup finished..<\/span><\/p>\n<p><span style=\"font-weight: 400\">The buildbot-worker appears to have (re)started correctly.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Now that both the master and worker are configured and running, we&#8217;ll execute a test build.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Step 4 \u2014 How to run the test build<\/span><\/p>\n<p><span style=\"font-weight: 400\">To run a test build, we&#8217;ll open the &#8220;Builds&#8221; menu in the web interface, then select &#8220;Workers&#8221;. The example worker and the information we set in\u00a0<\/span><span style=\"font-weight: 400\">info\/admin<\/span><span style=\"font-weight: 400\">\u00a0and\u00a0<\/span><span style=\"font-weight: 400\">info\/host<\/span><span style=\"font-weight: 400\">\u00a0should be displayed. From here, we can click on the default builder, &#8220;runtests&#8221; to force a build.<\/span><\/p>\n<p><span style=\"font-weight: 400\">The &#8220;runtests&#8221; screen will have little information until the first build request is made. We&#8217;ll force one now by clicking &#8220;force&#8221; button in the upper right of the screen:<\/span><\/p>\n<p><span style=\"font-weight: 400\">This will bring up a dialog which allows you to enter information about the forced build.<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><\/p>\n<p><span style=\"font-weight: 400\">For this test build, we&#8217;ll leave the fields blank and click the &#8220;Start Build&#8221; button in the popup window. Note that if you do enter a value in the &#8220;Your name&#8221; field, it must contain a valid email address.<\/span><\/p>\n<p><span style=\"font-weight: 400\">In a few seconds, the build should complete successfully:<\/span><\/p>\n<p><span style=\"font-weight: 400\">You can explore the details of each step in the build by clicking the number or arrow next to its name:<\/span><\/p>\n<p><span style=\"font-weight: 400\">You may have noticed that we weren&#8217;t required to log in to execute this build. By default, anyone can access administrative functions, so before we finish, we&#8217;ll take a moment to lock that down and create a user account. You can learn more about the available options ins [Buildbot&#8217;s Authorization documentation].(<\/span><a href=\"http:\/\/docs.buildbot.net\/current\/developer\/authz.html\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400\">http:\/\/docs.buildbot.net\/current\/developer\/authz.html<\/span><\/a><span style=\"font-weight: 400\">).<\/span><\/p>\n<p><span style=\"font-weight: 400\">Open the\u00a0<\/span><span style=\"font-weight: 400\">master.cfg<\/span><span style=\"font-weight: 400\">\u00a0file again:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">nano ~\/master\/master.cfg<\/span><\/li>\n<li style=\"font-weight: 400\"><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">At the bottom of the file, add the following lines, changing the username and password.<\/span><\/p>\n<p><span style=\"font-weight: 400\">File: ~\/master\/master.cfg<\/span><\/p>\n<p><span style=\"font-weight: 400\">. . .<\/span><\/p>\n<p><span style=\"font-weight: 400\">c[&#8216;www&#8217;][&#8216;authz&#8217;] = util.Authz(<\/span><\/p>\n<p><span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0allowRules = [<\/span><\/p>\n<p><span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0util.AnyEndpointMatcher(role=&#8221;admins&#8221;)<\/span><\/p>\n<p><span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],<\/span><\/p>\n<p><span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0roleMatchers = [<\/span><\/p>\n<p><span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0util.RolesFromUsername(roles=[&#8216;admins&#8217;], usernames=[&#8216;Shreyash<\/span><span style=\"font-weight: 400\">&#8216;])<\/span><\/p>\n<p><span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]<\/span><\/p>\n<p><span style=\"font-weight: 400\">)<\/span><\/p>\n<p><span style=\"font-weight: 400\">c[&#8216;www&#8217;][&#8216;auth&#8217;] = util.UserPasswordAuth([(&#8216;Shreyash<\/span><span style=\"font-weight: 400\">&#8216;,&#8217;<\/span><span style=\"font-weight: 400\">Password<\/span><span style=\"font-weight: 400\">&#8216;)])<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">buildbot restart ~\/master<\/span><\/li>\n<li style=\"font-weight: 400\"><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">When we reload the web interface, a link should appear in the upper-right that says Anonymous and access to the administrative functions is no longer available.<\/span><\/p>\n<p><span style=\"font-weight: 400\">We&#8217;ll test the credentials we just added by clicking &#8220;Anonymous&#8221;, which will bring up a login box where we can enter the username and password we configured. When we log in, we should see that while &#8220;Anonymous&#8221; no longer has access to start a build, our &#8220;Shreyash&#8221; user does.<\/span><\/p>\n<p><span style=\"font-weight: 400\">At this point, our installation of Buildbot is complete and we&#8217;ve taken a minimal step to secure the interface. The username and password, however, are being transmitted in plain text. We recommend as a next step and before using Buildbot in earnest that you secure the web interface with a\u00a0<\/span><a href=\"http:\/\/docs.buildbot.net\/current\/manual\/cfg-www.html?highlight=reverse%20proxy#reverse-proxy-configuration\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400\">reverse proxy<\/span><\/a><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Conclusion<\/span><\/p>\n<p><span style=\"font-weight: 400\">After following all the following steps mentioned above ,now you have installed and configured the Buildbot master and a local Buildbot worker on the same machine. For getting an fast access to the Buildbot,then you have to take project\u2019s Quick Tour.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction \u00a0 Buildbot it contains a python-baseb continuous integration system for automating software buid, test, and release processes. For handling asynchronous communication between a buildmaster and one or more workers to facilitate testing builds on multiple platforms it uses Python\u2019s Twisted library.It is very suitable for complex build processes or<\/p>\n","protected":false},"author":3,"featured_media":971,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"class_list":["post-958","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news-announcements"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/06\/buildbot_screenshot_01.png?fit=668%2C403&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p7ISfL-fs","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":2927,"url":"https:\/\/www.virtono.com\/community\/tutorial-how-to\/how-to-install-node-js-on-ubuntu-20-04\/","url_meta":{"origin":958,"position":0},"title":"How To Install Node.js on Ubuntu 20.04","author":"George B.","date":"August 3, 2022","format":false,"excerpt":"What is Node.js? Node.js is a back-end JavaScript runtime environment that runs on the V8 engine and executes JavaScript code outside of a web browser and was designed to build scalable network applications. Step 1 - Update the server package index sudo apt update Step 2 - Install Node.js on\u2026","rel":"","context":"In &quot;Tutorials&quot;","block_context":{"text":"Tutorials","link":"https:\/\/www.virtono.com\/community\/category\/tutorial-how-to\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/nodejs-new-pantone-black.png?fit=1200%2C735&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/nodejs-new-pantone-black.png?fit=1200%2C735&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/nodejs-new-pantone-black.png?fit=1200%2C735&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/nodejs-new-pantone-black.png?fit=1200%2C735&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/nodejs-new-pantone-black.png?fit=1200%2C735&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":3400,"url":"https:\/\/www.virtono.com\/community\/tutorial-how-to\/how-to-build-a-ci-cd-pipeline-with-jenkins-on-ubuntu-20-04\/","url_meta":{"origin":958,"position":1},"title":"How to build a CI\/CD Pipeline with Jenkins on Ubuntu 20.04","author":"George B.","date":"May 26, 2023","format":false,"excerpt":"In this tutorial, we will guide you through the process of building a CI\/CD pipeline with Jenkins on Ubuntu, empowering you to automate your software delivery process and streamline your development workflow. In today's fast-paced software development world, Continuous Integration and Continuous Delivery (CI\/CD) have become crucial practices for ensuring\u2026","rel":"","context":"In &quot;Tutorials&quot;","block_context":{"text":"Tutorials","link":"https:\/\/www.virtono.com\/community\/category\/tutorial-how-to\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2023\/05\/How-to-build-a-CI-CD-Pipeline-with-Jenkins-on-Ubuntu.png?fit=600%2C330&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2023\/05\/How-to-build-a-CI-CD-Pipeline-with-Jenkins-on-Ubuntu.png?fit=600%2C330&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2023\/05\/How-to-build-a-CI-CD-Pipeline-with-Jenkins-on-Ubuntu.png?fit=600%2C330&ssl=1&resize=525%2C300 1.5x"},"classes":[]},{"id":3856,"url":"https:\/\/www.virtono.com\/community\/tutorial-how-to\/how-to-install-apache-maven-on-ubuntu\/","url_meta":{"origin":958,"position":2},"title":"How to Install Apache Maven on Ubuntu","author":"George B.","date":"September 9, 2023","format":false,"excerpt":"This tutorial aims to provide a detailed, step-by-step guide on how to install Apache Maven on Ubuntu, a popular open-source operating system. In the realm of software development, Apache Maven stands as a robust project management tool, widely embraced for its ability to handle project builds, reporting, and documentation from\u2026","rel":"","context":"In &quot;Tutorials&quot;","block_context":{"text":"Tutorials","link":"https:\/\/www.virtono.com\/community\/category\/tutorial-how-to\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2023\/09\/How-to-Install-Apache-Maven-on-Ubuntu-22.png?fit=360%2C240&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":3904,"url":"https:\/\/www.virtono.com\/community\/tutorial-how-to\/how-to-install-flask-on-ubuntu-and-centos\/","url_meta":{"origin":958,"position":3},"title":"How to Install Flask on Ubuntu and CentOS","author":"George B.","date":"September 20, 2023","format":false,"excerpt":"Flask, a micro web framework written in Python, is an excellent tool for developers looking to create robust web applications. Its simplicity and flexibility make it a popular choice among developers worldwide. This article will guide you through the process of installing Flask on Ubuntu and CentOS. Prerequisites Make sure\u2026","rel":"","context":"In &quot;Tutorials&quot;","block_context":{"text":"Tutorials","link":"https:\/\/www.virtono.com\/community\/category\/tutorial-how-to\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2023\/09\/How-to-Install-Flask-on-Ubuntu-and-CentOS.png?fit=360%2C240&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":3913,"url":"https:\/\/www.virtono.com\/community\/tutorial-how-to\/how-to-install-rust-on-ubuntu-22-04\/","url_meta":{"origin":958,"position":4},"title":"How to Install Rust on Ubuntu 22.04","author":"George B.","date":"September 21, 2023","format":false,"excerpt":"This step-by-step guide will walk you through the process of installing Rust on Ubuntu 22.04, ensuring a seamless experience for both beginners and experienced developers. Rust has become a strong and cutting-edge option in the world of programming languages. Its emphasis on concurrency, performance, and safety has drawn developers from\u2026","rel":"","context":"In &quot;Tutorials&quot;","block_context":{"text":"Tutorials","link":"https:\/\/www.virtono.com\/community\/category\/tutorial-how-to\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2023\/09\/How-to-Install-Rust-on-Ubuntu.png?fit=360%2C240&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":3938,"url":"https:\/\/www.virtono.com\/community\/tutorial-how-to\/how-to-install-nagios-on-ubuntu-22-04\/","url_meta":{"origin":958,"position":5},"title":"How to install Nagios on Ubuntu 22.04","author":"George B.","date":"September 26, 2023","format":false,"excerpt":"In this tutorial, we'll walk you through each step of installing Nagios on Ubuntu 22.04. You will have a Nagios setup that is fully operational by the end of this article, which will make it easier for you to keep a close eye on your network and systems. Nagios, an\u2026","rel":"","context":"In &quot;Tutorials&quot;","block_context":{"text":"Tutorials","link":"https:\/\/www.virtono.com\/community\/category\/tutorial-how-to\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2023\/09\/How-to-Deploy-Redis-on-Kubernetes.png?fit=360%2C240&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/posts\/958","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/comments?post=958"}],"version-history":[{"count":1,"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/posts\/958\/revisions"}],"predecessor-version":[{"id":959,"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/posts\/958\/revisions\/959"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/media\/971"}],"wp:attachment":[{"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/media?parent=958"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/categories?post=958"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/tags?post=958"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}