Avatar of Scrayos
CEO at Scrayos UG (haftungsbeschränkt)·

We use GitLab CI because of the great native integration as a part of the GitLab framework and the linting-capabilities it offers. The visualization of complex pipelines and the embedding within the project overview made Gitlab CI even more convenient. We use it for all projects, all deployments and as a part of GitLab Pages.

While we initially used the Shell-executor, we quickly switched to the Docker-executor and use it exclusively now.

We formerly used Jenkins but preferred to handle everything within GitLab . Aside from the unification of our infrastructure another motivation was the "configuration-in-file"-approach, that Gitlab CI offered, while Jenkins support of this concept was very limited and users had to resort to using the webinterface. Since the file is included within the repository, it is also version controlled, which was a huge plus for us.

READ MORE
11 upvotes·137.6K views
Avatar of undefined
Avatar of Scrayos
CEO at Scrayos UG (haftungsbeschränkt)·

We use Sonatype Nexus to store our closed-source java libraries to simplify our deployment and dependency-management. While there are many alternatives, most of them are expensive ( GitLab Enterprise ), monilithic ( JFrog Artifactory ) or only offer SaaS-licences. We preferred the on-premise approach of Nexus and therefore decided to use it.

We exclusively use the Maven-capabilities and are glad that the modular design of Nexus allows us to run it very lightweight.

READ MORE
9 upvotes·109.1K views
Avatar of undefined
Avatar of Scrayos
CEO at Scrayos UG (haftungsbeschränkt)·

We primarily use MariaDB but use PostgreSQL as a part of GitLab , Sentry and Nextcloud , which (initially) forced us to use it anyways. While this isn't much of a decision – because we didn't have one (ha ha) – we learned to love the perks and advantages of PostgreSQL anyways. PostgreSQL's extension system makes it even more flexible than a lot of the other SQL-based DBs (that only offer stored procedures) and the additional JOIN options, the enhanced role management and the different authentication options came in really handy, when doing manual maintenance on the databases.

READ MORE
8 upvotes·185.6K views
Avatar of undefined
Avatar of Scrayos
CEO at Scrayos UG (haftungsbeschränkt)·

As the access to our global REST-API "Charon" is bound to OAuth2, we use Keycloak inside Quarkus to authenticate and authorize users of our API. It is not possible to perform any un-authenticated requests against this API, so we wanted to make really sure that the authentication/authorization component is absolutely reliable and tested. We found those attributes within Keycloak, so we used it.

READ MORE
6 upvotes·141.6K views
Avatar of undefined
Avatar of Scrayos
CEO at Scrayos UG (haftungsbeschränkt)·

For our internal team and collaboration panel we use Nuxt.js (with TypeScript that is transpiled into ES6), Webpack and npm. We enjoy the opinionated nature of Nuxt.js over vanilla Vue.js, as we would end up using all of the components Nuxt.js incorporates anyways and we can adhere to the conventions setup by the Nuxt.js project, which allows us to get better support in case we run into any dead ends. Webpack allows us to create reproducable builds and also debug our application with hot reloads, which greately increased the pace at which we are able to perform and test changes. We also incorporated a lot of testing (ESLint, Chai, Jasmine, Nightwatchjs) into our pipelines and can trigger those jobs through GitLab CI. All packages are fetched through npm, so that we can keep our git repositories slim and are notified of new updates aswell as reported security flaws.

READ MORE
5 upvotes·22.1K views
Avatar of undefined
Avatar of Scrayos
CEO at Scrayos UG (haftungsbeschränkt)·

We use GraphQL for the communication between our Minecraft-Proxies/Load-Balancers and our global Minecraft-Orchestration-Service JCOverseer.

This connection proved to be especially challenging, as there were so many available options and very specific requirements and we tried our hardest to put as little complexity into this interface as possible.

Initially we considered designing our very own Netty based Packet-Protocol. While the performance of this approach probably would've been noteworthy, we would have had to write a lot of packets as the individual payloads would differ a lot and for the protocol specification a new project would've been needed, so we scrapped that idea.

Our second idea was to use a combination of Redis Key/Value store (in particular the ability to write whole, complex sets as the values of keys) for existing data, Redis Pub-Sub for the synchronization of new/changed/deleted data and a Vert.x based REST API for the mutation requests of the clients. While this would certainly have been possible, we decided against it, as redis offers no real other data types than strings and typing was important to us.

So we finally settled for GraphQL as it would allow us to define dynamic queries and mutations and additionally has subscriptions in store, so we would only need one component instead of three separate. The proxies register as subscribers to the server changes channel and fetch the current data set in advance. If they need to request changes, this is done through a mutation in GraphQL aswell.

The status of the invidiual servers is fetched through Docker healthchecks and a Docker client in the orchestration service, that subscribes to changed HEALTHINESS values in docker. If a service becomes unhealthy it is unregistered and synchronized through GraphQL. The healthcheck is comparable to a ping packet that expects a response in a given time frame.

READ MORE
5 upvotes·12.3K views
Avatar of undefined
Avatar of Scrayos
CEO at Scrayos UG (haftungsbeschränkt)·

We use Swagger Inspector in conjunction with our universal REST-API "Charon". Swagger Inspector makes testing edge-cases hassle-free and lets testing look easy. Swagger Inspector was also a great help to explore the Mojang-API, that we are dependent on, because it is the central repository for minecraft-account-data.

We previously used Postman but decided to switch over to Swagger Inspector because it also integrated seamlessly into Swagger UI, which we use for displaying our OpenAPI specification of said REST-API.

READ MORE
4 upvotes·122.8K views
Avatar of undefined
Avatar of Scrayos
CEO at Scrayos UG (haftungsbeschränkt)·

OpenLDAP is pretty much unrivaled, when it comes to the LDAP-Protocol. Although it is not hard to spot, that the general structure looks a little bit anachronistic in a time of microservices, cloud-native applications and dockerization, it is very reliable, stable and still actively developed.

We use OpenLDAP within a docker-container und interact with it through another docker-container, housing phpLDAPadmin. LDAP is still the gold-standard regarding a centralized, digital directory of the company accounts, structures and permissions and that's why we use it.

It is necessary, however, to install extensions for some features like enhanced group queries, better password algorithms and a few other features, that I'd like to be shipped by default.

READ MORE
3 upvotes·5.3K views
Avatar of undefined
Avatar of Scrayos
CEO at Scrayos UG (haftungsbeschränkt)·

We use JaCoCo because it enables us to statically find missing test opportunities and improve our Test-Coverage, alongside PITest. While PITest performs mutation testing to dynamically and heuristically find missing test cases, JaCoCo finds lines of code that are not covered by the tests until now.

Both coverage tests are equally important for us and so JaCoCo has become an essential part of our build pipeline.

READ MORE
3 upvotes·3.4K views
Avatar of undefined
Avatar of Scrayos
CEO at Scrayos UG (haftungsbeschränkt)·

All Java-Projects are compiled using Apache Maven. We prefer it over Apache Ant and Gradle as it combines lightweightness with feature-richness and offers basically all we can imagine from a software project-management tool and more. We're open however to re-evaluate this decision in favor of Gradle or Bazel in the future if we feel like we're missing out on anything.

READ MORE
2 upvotes·194.4K views
Avatar of undefined