DevOps with Servoy


Easily automate your developer operations by using GitHub actions or Bitbucket Pipelines to create pipelines that build your Servoy WAR export files for you. Hook up to thousands of other actions in the GitHub Marketplace or public Pipes in Bitbucket to fully automate your deployments, generate slack notifications, and more. Or, just keep it simple and upload the generated WAR to your Java server. The choice is yours, and you are in full control!

1

Source Control

Use GitHub or Bitbucket as your Git source control repository to host the code for your Servoy solution. GitHub & Bitbucket are trusted hosts with over 300M repositories and has a community of over 100M developers. Accounts private and free or paid for extra features.
2

Setup the Action

Setup the GitHub Action or Bitbucket Pipe we provide and configure it to your desired preferences. Follow our sample code project as an example.
3

Watch it Build

Based on your configuration, it will trigger new builds whenever you want. That could be on every commit, or based on special commit messages. On the Actions tab of your GitHub repo and Pipelines tab in Bitbucket, you can watch the builds happen and review logs.
4

Deploy It

You can chain together as many actions as you want. FTP, SFTP, AWS S3 bucket, Azure blob storage, and more. You can get more advanced and deploy the WAR to your Tomcat server automatically, or keep it simple and retrieve the WAR file from your desired location and handle the deployment manually.

Example Configurations

GitHub Actions are YAML files setup in your git repo. See an overview here or read more about creating actions here.
We've also setup a sample project showing a small Servoy solution setup with our devops tools to automatically generate the war and upload it via SFTP or do a full deployment via a Tomcat docker image pushed to your docker container registry. You can check that sample out here.

For Bitbucket Pipelines, the documentation is here and you can view the example project here. The Pipe is available here.

Build the WAR on every commit to ensure the latest commit didn't break anything basic. The WAR is discarded immediately after generated.


name: Build WAR File
on: 
  push:
    branches:
      - develop 
jobs:                       
  build:
    runs-on: ubuntu-latest
    steps:
     - name: Checkout
       uses: actions/checkout@v2

     - name: Servoy Build
       uses: itechpros/servoy-war-builder@v1
       with:
         servoy-version: 2022.03.4.3746
         api-key: ${{ secrets.ALL_PRODUCTS_PACK_KEY }}
         solution-name: cloudSampleSolution
         default-admin-user: ${{ secrets.DEFAULT_ADMIN_USER }}
         default-admin-password: ${{ secrets.DEFAULT_ADMIN_PASSWORD }}
         properties-file: prop_files/servoy.build.properties
         dbi: true

On commit message containing "[war]", build the WAR and upload it to an SFTP server.


name: Build War and FTP Upload
on: 
  push:
    branches:
      - develop 
jobs:                       
  build:
    runs-on: ubuntu-latest
	if: "contains(github.event.head_commit.message, '[war]')"
    steps:
     - name: Checkout
       uses: actions/checkout@v2

     - name: Servoy Build
       uses: itechpros/servoy-war-builder@v1
       with:
         servoy-version: 2022.03.4.3746
         api-key: ${{ secrets.ALL_PRODUCTS_PACK_KEY }}
         solution-name: cloudSampleSolution
         default-admin-user: ${{ secrets.DEFAULT_ADMIN_USER }}
         default-admin-password: ${{ secrets.DEFAULT_ADMIN_PASSWORD }}
         properties-file: prop_files/servoy.build.properties
         dbi: true
         war-file-name: myapp.war 

     - name: SFTP Upload
       uses: wlixcc/SFTP-Deploy-Action@v1.2.4
       with:
         username: ${{ secrets.FTP_USER }}
         password: ${{ secrets.FTP_PASS }}
         server: 'mycompany.com'
         local_path: 'myapp.war'
         remote_path: '/path/on/ftp/server'

On commit message containing "[war]", build the WAR and upload to Amazon S3 bucket


name: "Build and Upload"
on:
  push:
    branches:
     - develop
jobs:
  build:
    runs-on: ubuntu-latest
	if: "contains(github.event.head_commit.message, '[war]')"
    steps:
     - name: Checkout
       uses: actions/checkout@v2
     - name: Servoy WAR Build
       uses: itechpros/servoy-war-builder@v1
       with:
         servoy-version: 2023.03.2.3844
         api-key: License Key from us
         solution-name: MySolution
         default-admin-user: admin
         default-admin-password: password
         dbi: true
         extras-folder: ServoyDeveloperExtras
	- name: Upload file to bucket
        uses: koraykoska/s3-upload-github-action@master
        env:
          FILE: MySolution.war
          S3_ENDPOINT: 's3.us-east-1.amazonaws.com'
          S3_BUCKET: ${{ secrets.S3_BUCKET }}
          S3_ACCESS_KEY_ID: ${{ secrets.S3_ACCESS_KEY_ID }}
          S3_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_ACCESS_KEY }}

On commit message containing "[war]", build the WAR and upload to Azure Blob Storage


name: "Build and Upload"
on:
  push:
    branches:
     - develop
jobs:
  build:
    runs-on: ubuntu-latest
	if: "contains(github.event.head_commit.message, '[war]')"
    steps:
     - name: Checkout
       uses: actions/checkout@v2
     - name: Servoy WAR Build
       uses: itechpros/servoy-war-builder@v1
       with:
         servoy-version: 2023.03.2.3844
         api-key: License Key from us
         solution-name: MySolution
         default-admin-user: admin
         default-admin-password: password
         dbi: true
         extras-folder: ServoyDeveloperExtras
	- name: Upload WAR to Azure
		uses: LanceMcCarthy/Action-AzureBlobUpload@v2
        with:
          connection_string: ${{ secrets.AZURE_CONNECTION_STRING }}
          container_name: war-exports
          source_folder: MySolution.war
          destination_folder: export
          fail_if_source_empty: true
          delete_if_exists: true

On commit message containing "[dockerImage]", build the WAR and bundle it inside of a new Tomcat docker image, then tag and push that to your docker registry of your cloud hosting provider (DigiitalOcean example below). Then you can have that auto-deploy, or manually deploy by choosing the tag to deploy in your cloud hosing console.


name: Build War and Tomcat Docker Image
on: 
  push:
    branches:
      - develop 
jobs:                       
  build:
    runs-on: ubuntu-latest
	if: "contains(github.event.head_commit.message, '[dockerImage]')"
    steps:
     - name: Checkout
       uses: actions/checkout@v2

     - name: Servoy Build
       uses: itechpros/servoy-war-builder@v1
       with:
         servoy-version: 2022.03.4.3746
         api-key: ${{ secrets.ALL_PRODUCTS_PACK_KEY }}
         solution-name: cloudSampleSolution
         default-admin-user: ${{ secrets.DEFAULT_ADMIN_USER }}
         default-admin-password: ${{ secrets.DEFAULT_ADMIN_PASSWORD }}
         properties-file: prop_files/servoy.build.properties
         dbi: true
         war-file-name: myapp.war 

     - name: Docker Login
       uses: docker/login-action@v2
       with:
         registry: registry.digitalocean.com
         username: ${{ secrets.DIGITALOCEAN_TOKEN }}
         password: ${{ secrets.DIGITALOCEAN_TOKEN }}

     - name: Tomcat Image Build
       uses: itechpros/servoy-tomcat-builder@main
       with:
         tomcat-version: 9
         java-version: 17
         war-file: myapp.war
         image-name: registry.digitalocean.com/svytest/servoy-tomcat

Frequently Asked Questions

1Why do I need this?
If you're still manually building WAR files, its time for an upgrade! By automating the WAR builds, you get many benefits:
  • Standardized Package. You know its built the exact same way each time.
  • Save Time. Let the builds happen in the background instead of waiting on them.
  • Automate Tests. Hook into your testing frameworks to run any tests needed after the build.
  • Deploy Automatically. After build, deploy the war file any way you want.
  • Integrations. Hook into the thousands of GitHub actions available like Slack or Teams notifications to let you know the success of your builds..
2Is this secure?
Yes! For private GitHub repositories, it is secure. Everything runs inside your own GitHub private environment. All of the actions, including our docker images, are executed within your GitHub private account. Read more about GitHub security.
3What kind of GitHub account do I need?
The builds happen in your GitHub account and count towards the CI/CD minute limits. Free accounts get 2,000 minutes a month and Pro/Team accounts get 3,000 minutes a month. A Servoy WAR build and upload generally takes about 10min. So thats 200 to 300 builds a month. Additional builds are $0.008 per minute, or about 8¢ per build. More pricing details are available here.
You can also have the builds done on your own infrastructure (see self hosted runners).
If you choose to store your WAR files as GitHub releases, you'll also want to add the $5 monthly add-on for 50GB of extra storage.
General GitHub account pricing is available here.
4What if I don't use GitHub or Bitbucket?
We highly recommend GitHub for its security, popularity, and extensibility, but we understand that some people want to host their source code elsewhere. If you prefer Bitbucket, we also have that available. Contact us and we can discuss how to use our DevOps tools without GitHub. Essentially its a public docker image that you can execute and integrate into the devops tools of your choice.
5What if I need help?
We provide some basic support for free, but if you need more help, we also provide consulting services or can also setup the entire build pipeline for you.
6How is this different from Servoy Cloud?
Servoy Cloud is a full PaaS (Platform-as-a-service). It handles test automation, WAR generation, deployment, hosting, and monitoring in one easy place without any additional technical know-how needed. All the hard stuff is handled for you, and its officially supported by Servoy with its SLA's. Basic pricing starts around $9K a year and includes licensing.
Our DevOps package is just a set of tools to help you simplify your WAR builds or to build your own pipeline. They are aimed at customers that want more control of their pipeline and hosting, while bringing their own Servoy licenses. For example, if you want to deploy within your own infrastructure or a different cloud provider. If you prefer that level of control, our DevOps tools are a great time saver to help you build your own custom pipeline. It does require additional technical know-how on your part, so you'll need to be comfortable with setting up the configurations, reviewing logs, etc. We can also setup your custom pipeline for you under our consulting services.
7Is there any additional documentation?
Yes, please see the Read Me in the GitHub repo.
We've also setup a sample project showing a small Servoy solution setup with our devops tools to automatically generate the war and upload it to a GitHub release. You can check that sample out here.
For Bitbucket, there is documentation on usage at https://support.servoycomponents.com/portal/en/kb/articles/servoy-war-builder-bitbucket-pipelines The example repo showing Servoy WAR build with SFTP is available at https://bitbucket.org/itechpros/servoy-war-builder-examples/src/master/

Buy Now