SlideShare a Scribd company logo
1 of 21
Download to read offline
From GitHub Source to GitHub Release:
Free CI/CD Pipelines for JavaFX Apps
Bruno Borges
Principal Product Manager, Java at Microsoft
December 02, 2019
Who am I?
• Java Champion
• JavaFX hobbyist/advocate
• Java developer since 2001
• Principal Program/Product Manager
• Java at Microsoft
• Previously
• Java Team Lead on the Azure Developer Relations
Advocacy Group
• Oracle: Product Manager for Developer Relations
and Engagement Strategy
@brunoborges
/brunoborges
Agenda
Java at Microsoft
Java Packaging Tools
• Java 9+ and jlink
• Java 14 and jpackage
• Maven/Gradle support
Microsoft CICD Overview
• Intro to GitHub Actions and Azure DevOps
JavaFX Apps – Live Demos
• Building and Shipping
Java at Microsoft
Microsoft
Depends
Heavily
on Java
LinkedIn
• Over 500+ Java microservices in production.
• Over 60+ Java open source projects on GitHub.
Azure
• Services dependent on Java include primarily Azure HDInsight, Azure
Databricks, and Azure Spring Cloud.
SQL Server
• Java now embedded out of the box (Azul Zulu).
• PolyBase data visualization and Big Data Clusters interop with Spark,
Hadoop connectors.
• Java apps and JDBC connectors
Yammer
• Most of its back-end implemented in Java.
Mojang’s Minecraft
• Hundreds of servers built in Java.
• Client Java Edition still very popular.
Android
• 1,000+ of MS developers who build native or Xamarin apps for Android still
need Java on their dev environments and CI/CD pipelines.
• New Surface Duo phone based on Android OS.
Latest Java Investments
Java on Azure: Free Commercial Support
§ Supported OS: Windows, Linux, MacOS
§ Supported Platforms: Microsoft Azure, Azure Stack
§ Upstream changes pushed to OpenJDK by Azul Systems
JUL 2023 MAR 2025 SEP 2026
Available now, supported until… Available now
PREVIEW
DevOps Tools
• Jenkins plugins for Azure and integration with Azure DevOps
• Azure Pipelines
• Supports Microsoft-hosted and self-hosted build agents
• GitHub Actions
• Supports GitHub-hosted and self-hosted build agents
• Windows, Linux, and macOS hosted build agents for both services
Azure Pipelines Azure DevOps
From Code to OS Installers
Azure Pipelines
App.java
Project Releases tab
MSI, EXE DEB, RPM PKG, DMG
Build Project and Installers
Upload to
Or anywhere else
Java Packaging Tools
jlink and jpackage
Java Modules
jlink – Create Custom Java Runtimes
• Trims a Java Runtime to contain only required modules to run the app
• Full JDK 13: 305 MB (expanded)
• jlink’ed runtime: 25.5 MB (expanded)
module myapp {
requires java.logging;
}
jlink --module-path "$JAVA_HOME/jmods":target/classes 
--add-modules myapp 
--output jruntime/
jpackage – Create OS Specific Packages
• JEP 343 – jdk.java.net/jpackage/
• Under development on upcoming JDK 14
• Packages a Java application and the JRE on OS specific installers
• DMG: 11 MB (compressed)
jpackage --type dmg 
--dest target/installer 
--name mywebapp 
--module-path target/helloworld-1.0-SNAPSHOT.jar 
--module example.web/com.example.App
Maven and Gradle Plugins
• General support for JPMS/Jigsaw (Java 9+ modules)
• Maven: core plugins support it
• Gradle: not currently supported
• Maven
• jmod: maven.apache.org/plugins/maven-jmod-plugin
• jlink: maven.apache.org/plugins/maven-jlink-plugin
• jlink: github.com/raydac/mvn-jlink
• jlink+jpackage: agilhard-oss.github.io/jlink-jpackager-maven-plugin/site/
• Gradle
• badass-jlink-plugin.beryx.org/releases/latest
Microsoft CICD Overview
Azure DevOps, Azure Pipelines, and GitHub Actions
Azure and GitHub
Source control
Based on Git
Azure
Repos
GitHub
CI/CD
Based on the Azure
Pipelines technology
Code packages
Based on standard,
open package formats
Azure
Pipelines
GitHub
Actions
Azure
Artifacts
GitHub
Packages
GitHub Actions and Azure Pipelines
GitHub Actions is the modern CI/CD
platform integrated into GitHub
GitHub Actions is the best option for customers
leveraging GitHub as their source control
repository or looking to adopt modern CI/CD
Actions powered by the community.
Choose Azure Pipelines if your organization
needs…
• Support for Git repos outside of GitHub, or
inside TFVC or Subversion.
• Cloud-hosted functionality with data at rest
outside of the US.
• Continuous Delivery for containerized
workloads with deep Kubernetes integration.
• MLOps capabilities integrated with Azure
Machine Learning.
JavaFX Apps – Live Demos
Building and Shipping
Source code
• 2048fx
• github.com/brunoborges/fx2048
• CICD definition files
• GitHub Actions: /.github/workflows/gradle.yml
• Azure Pipelines: /build-job.yml
• Gradle and jlink+jpackage:
• /build.gradle
• Custom GitHub Action
• github.com/brunoborges/justextract
• Simple Web App
• github.com/brunoborges/simple-web-app
Resources
• GitHub Actions
• Docs: help.github.com/en/actions
• Source code of actions: github.com/actions
• Setup Java Action: github.com/actions/setup-java
• Azure Pipelines
• Docs: docs.microsoft.com/azure/devops/pipelines/
• Source code of tasks: github.com/microsoft/azure-pipelines-tasks
• Java Installer Task: github.com/microsoft/azure-pipelines-
tasks/tree/master/Tasks/JavaToolInstallerV0
Thank you
@brunoborges

More Related Content

What's hot

JAX 2013: Introducing Eclipse Orion
JAX 2013: Introducing Eclipse OrionJAX 2013: Introducing Eclipse Orion
JAX 2013: Introducing Eclipse Orion
martinlippert
 

What's hot (20)

SERVERLESS MIDDLEWARE IN AZURE FUNCTIONS
SERVERLESS MIDDLEWARE IN AZURE FUNCTIONSSERVERLESS MIDDLEWARE IN AZURE FUNCTIONS
SERVERLESS MIDDLEWARE IN AZURE FUNCTIONS
 
Deployment Pipeline for databases (Azure SQL Database, SQL Server)
Deployment Pipeline for databases (Azure SQL Database, SQL Server)Deployment Pipeline for databases (Azure SQL Database, SQL Server)
Deployment Pipeline for databases (Azure SQL Database, SQL Server)
 
Scaling Jenkins Enterprise Wide
Scaling Jenkins Enterprise WideScaling Jenkins Enterprise Wide
Scaling Jenkins Enterprise Wide
 
Azure App Service at Let's Dev This
Azure App Service at Let's Dev ThisAzure App Service at Let's Dev This
Azure App Service at Let's Dev This
 
Introduction Asp.Net MVC5 |MVC5 Tutorial for Beginners & Advanced | Dot Net T...
Introduction Asp.Net MVC5 |MVC5 Tutorial for Beginners & Advanced | Dot Net T...Introduction Asp.Net MVC5 |MVC5 Tutorial for Beginners & Advanced | Dot Net T...
Introduction Asp.Net MVC5 |MVC5 Tutorial for Beginners & Advanced | Dot Net T...
 
Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...
Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...
Continues Integration and Continuous Delivery with Azure DevOps - Deploy Anyt...
 
Ed Elliott - Practical DSC in Azure
Ed Elliott - Practical DSC in AzureEd Elliott - Practical DSC in Azure
Ed Elliott - Practical DSC in Azure
 
Full-Stack Development with Spring Boot and VueJS
Full-Stack Development with Spring Boot and VueJSFull-Stack Development with Spring Boot and VueJS
Full-Stack Development with Spring Boot and VueJS
 
Best practices deploying Sitecore to Microsoft Azure
Best practices deploying Sitecore to Microsoft AzureBest practices deploying Sitecore to Microsoft Azure
Best practices deploying Sitecore to Microsoft Azure
 
Infrastructure as Code (BBWorld/DevCon13)
Infrastructure as Code (BBWorld/DevCon13)Infrastructure as Code (BBWorld/DevCon13)
Infrastructure as Code (BBWorld/DevCon13)
 
Introduction To Jenkins - SpringPeople
Introduction To Jenkins - SpringPeopleIntroduction To Jenkins - SpringPeople
Introduction To Jenkins - SpringPeople
 
Run UI Automation Tests using Selenium Grid and Azure Container Service (AKS)
Run UI Automation Tests using Selenium Grid and Azure Container Service (AKS)Run UI Automation Tests using Selenium Grid and Azure Container Service (AKS)
Run UI Automation Tests using Selenium Grid and Azure Container Service (AKS)
 
AngularJS Anatomy & Directives
AngularJS Anatomy & DirectivesAngularJS Anatomy & Directives
AngularJS Anatomy & Directives
 
Continuous Delivery for Front-End Engineers
Continuous Delivery for Front-End EngineersContinuous Delivery for Front-End Engineers
Continuous Delivery for Front-End Engineers
 
Building our App with React Native
Building our App with React NativeBuilding our App with React Native
Building our App with React Native
 
Super tools to boost productivity in React dev env!
Super tools to boost productivity in React dev env!Super tools to boost productivity in React dev env!
Super tools to boost productivity in React dev env!
 
Getting Started with PaaS
Getting Started with PaaSGetting Started with PaaS
Getting Started with PaaS
 
DevOps for Databricks
DevOps for DatabricksDevOps for Databricks
DevOps for Databricks
 
Contract-based Testing Approach as a Tool for Shift Lef
Contract-based Testing Approach as a Tool for Shift LefContract-based Testing Approach as a Tool for Shift Lef
Contract-based Testing Approach as a Tool for Shift Lef
 
JAX 2013: Introducing Eclipse Orion
JAX 2013: Introducing Eclipse OrionJAX 2013: Introducing Eclipse Orion
JAX 2013: Introducing Eclipse Orion
 

Similar to From GitHub Source to GitHub Release: Free CICD Pipelines For JavaFX Apps

Build your android app with gradle
Build your android app with gradleBuild your android app with gradle
Build your android app with gradle
Swain Loda
 
Docker Birthday #3 Slides - Overview
Docker Birthday #3 Slides - OverviewDocker Birthday #3 Slides - Overview
Docker Birthday #3 Slides - Overview
Chris Ciborowski
 

Similar to From GitHub Source to GitHub Release: Free CICD Pipelines For JavaFX Apps (20)

What's new in Gradle 4.0
What's new in Gradle 4.0What's new in Gradle 4.0
What's new in Gradle 4.0
 
Intelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest IstanbulIntelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest Istanbul
 
GitHub for partners
GitHub for partnersGitHub for partners
GitHub for partners
 
Mastering azure devOps - Dot Net Tricks
Mastering azure devOps - Dot Net TricksMastering azure devOps - Dot Net Tricks
Mastering azure devOps - Dot Net Tricks
 
BMO - Intelligent Projects with Maven
BMO - Intelligent Projects with MavenBMO - Intelligent Projects with Maven
BMO - Intelligent Projects with Maven
 
GraalVM and Oracle's Documentation Trends.pdf
GraalVM and Oracle's Documentation Trends.pdfGraalVM and Oracle's Documentation Trends.pdf
GraalVM and Oracle's Documentation Trends.pdf
 
Build your android app with gradle
Build your android app with gradleBuild your android app with gradle
Build your android app with gradle
 
Logic Apps – Deployments
Logic Apps – DeploymentsLogic Apps – Deployments
Logic Apps – Deployments
 
Azure DevOps & GitHub... Better Together!
Azure DevOps & GitHub... Better Together!Azure DevOps & GitHub... Better Together!
Azure DevOps & GitHub... Better Together!
 
Gradle,the new build system for android
Gradle,the new build system for androidGradle,the new build system for android
Gradle,the new build system for android
 
Accelerate Spring Apps to Cloud at Scale
Accelerate Spring Apps to Cloud at ScaleAccelerate Spring Apps to Cloud at Scale
Accelerate Spring Apps to Cloud at Scale
 
Accelerate Spring Apps to Cloud at Scale—Discussion with Azure Spring Cloud C...
Accelerate Spring Apps to Cloud at Scale—Discussion with Azure Spring Cloud C...Accelerate Spring Apps to Cloud at Scale—Discussion with Azure Spring Cloud C...
Accelerate Spring Apps to Cloud at Scale—Discussion with Azure Spring Cloud C...
 
Gradle - Build System
Gradle - Build SystemGradle - Build System
Gradle - Build System
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository world
 
gopaddle-meetup
gopaddle-meetupgopaddle-meetup
gopaddle-meetup
 
Webinar: Capabilities, Confidence and Community – What Flux GA Means for You
Webinar: Capabilities, Confidence and Community – What Flux GA Means for YouWebinar: Capabilities, Confidence and Community – What Flux GA Means for You
Webinar: Capabilities, Confidence and Community – What Flux GA Means for You
 
Custom Runtimes for the Cloud
Custom Runtimes for the CloudCustom Runtimes for the Cloud
Custom Runtimes for the Cloud
 
Increase the Velocity of Your Software Releases Using GitHub and DeployHub
Increase the Velocity of Your Software Releases Using GitHub and DeployHubIncrease the Velocity of Your Software Releases Using GitHub and DeployHub
Increase the Velocity of Your Software Releases Using GitHub and DeployHub
 
Docker Birthday #3 - Intro to Docker Slides
Docker Birthday #3 - Intro to Docker SlidesDocker Birthday #3 - Intro to Docker Slides
Docker Birthday #3 - Intro to Docker Slides
 
Docker Birthday #3 Slides - Overview
Docker Birthday #3 Slides - OverviewDocker Birthday #3 Slides - Overview
Docker Birthday #3 Slides - Overview
 

More from Bruno Borges

Tecnologias Oracle em Docker Containers On-premise e na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na NuvemTecnologias Oracle em Docker Containers On-premise e na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na Nuvem
Bruno Borges
 
Build and Monitor Cloud PaaS with JVM’s Nashorn JavaScripts [CON1859]
Build and Monitor Cloud PaaS with JVM’s Nashorn JavaScripts [CON1859]Build and Monitor Cloud PaaS with JVM’s Nashorn JavaScripts [CON1859]
Build and Monitor Cloud PaaS with JVM’s Nashorn JavaScripts [CON1859]
Bruno Borges
 
Cloud Services for Developers: What’s Inside Oracle Cloud for You? [CON1861]
Cloud Services for Developers: What’s Inside Oracle Cloud for You? [CON1861]Cloud Services for Developers: What’s Inside Oracle Cloud for You? [CON1861]
Cloud Services for Developers: What’s Inside Oracle Cloud for You? [CON1861]
Bruno Borges
 
Java EE Application Servers: Containerized or Multitenant? Both! [CON7506]
Java EE Application Servers: Containerized or Multitenant? Both! [CON7506]Java EE Application Servers: Containerized or Multitenant? Both! [CON7506]
Java EE Application Servers: Containerized or Multitenant? Both! [CON7506]
Bruno Borges
 
Tweet for Beer - Beertap Powered by Java Goes IoT, Cloud, and JavaFX
Tweet for Beer - Beertap Powered by Java Goes IoT, Cloud, and JavaFXTweet for Beer - Beertap Powered by Java Goes IoT, Cloud, and JavaFX
Tweet for Beer - Beertap Powered by Java Goes IoT, Cloud, and JavaFX
Bruno Borges
 

More from Bruno Borges (20)

Secrets of Performance Tuning Java on Kubernetes
Secrets of Performance Tuning Java on KubernetesSecrets of Performance Tuning Java on Kubernetes
Secrets of Performance Tuning Java on Kubernetes
 
[Outdated] Secrets of Performance Tuning Java on Kubernetes
[Outdated] Secrets of Performance Tuning Java on Kubernetes[Outdated] Secrets of Performance Tuning Java on Kubernetes
[Outdated] Secrets of Performance Tuning Java on Kubernetes
 
A Look Back at Enterprise Integration Patterns and Their Use into Today's Ser...
A Look Back at Enterprise Integration Patterns and Their Use into Today's Ser...A Look Back at Enterprise Integration Patterns and Their Use into Today's Ser...
A Look Back at Enterprise Integration Patterns and Their Use into Today's Ser...
 
Melhore o Desenvolvimento do Time com DevOps na Nuvem
Melhore o Desenvolvimento do Time com DevOps na NuvemMelhore o Desenvolvimento do Time com DevOps na Nuvem
Melhore o Desenvolvimento do Time com DevOps na Nuvem
 
Tecnologias Oracle em Docker Containers On-premise e na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na NuvemTecnologias Oracle em Docker Containers On-premise e na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na Nuvem
 
Java EE Arquillian Testing with Docker & The Cloud
Java EE Arquillian Testing with Docker & The CloudJava EE Arquillian Testing with Docker & The Cloud
Java EE Arquillian Testing with Docker & The Cloud
 
Migrating From Applets to Java Desktop Apps in JavaFX
Migrating From Applets to Java Desktop Apps in JavaFXMigrating From Applets to Java Desktop Apps in JavaFX
Migrating From Applets to Java Desktop Apps in JavaFX
 
Servidores de Aplicação: Por quê ainda precisamos deles?
Servidores de Aplicação: Por quê ainda precisamos deles?Servidores de Aplicação: Por quê ainda precisamos deles?
Servidores de Aplicação: Por quê ainda precisamos deles?
 
Build and Monitor Cloud PaaS with JVM’s Nashorn JavaScripts [CON1859]
Build and Monitor Cloud PaaS with JVM’s Nashorn JavaScripts [CON1859]Build and Monitor Cloud PaaS with JVM’s Nashorn JavaScripts [CON1859]
Build and Monitor Cloud PaaS with JVM’s Nashorn JavaScripts [CON1859]
 
Cloud Services for Developers: What’s Inside Oracle Cloud for You? [CON1861]
Cloud Services for Developers: What’s Inside Oracle Cloud for You? [CON1861]Cloud Services for Developers: What’s Inside Oracle Cloud for You? [CON1861]
Cloud Services for Developers: What’s Inside Oracle Cloud for You? [CON1861]
 
Booting Up Spring Apps on Lightweight Cloud Services [CON10258]
Booting Up Spring Apps on Lightweight Cloud Services [CON10258]Booting Up Spring Apps on Lightweight Cloud Services [CON10258]
Booting Up Spring Apps on Lightweight Cloud Services [CON10258]
 
Java EE Application Servers: Containerized or Multitenant? Both! [CON7506]
Java EE Application Servers: Containerized or Multitenant? Both! [CON7506]Java EE Application Servers: Containerized or Multitenant? Both! [CON7506]
Java EE Application Servers: Containerized or Multitenant? Both! [CON7506]
 
Running Oracle WebLogic on Docker Containers [BOF7537]
Running Oracle WebLogic on Docker Containers [BOF7537]Running Oracle WebLogic on Docker Containers [BOF7537]
Running Oracle WebLogic on Docker Containers [BOF7537]
 
Lightweight Java in the Cloud
Lightweight Java in the CloudLightweight Java in the Cloud
Lightweight Java in the Cloud
 
Tweet for Beer - Beertap Powered by Java Goes IoT, Cloud, and JavaFX
Tweet for Beer - Beertap Powered by Java Goes IoT, Cloud, and JavaFXTweet for Beer - Beertap Powered by Java Goes IoT, Cloud, and JavaFX
Tweet for Beer - Beertap Powered by Java Goes IoT, Cloud, and JavaFX
 
Integrando Oracle BPM com Java EE e WebSockets
Integrando Oracle BPM com Java EE e WebSocketsIntegrando Oracle BPM com Java EE e WebSockets
Integrando Oracle BPM com Java EE e WebSockets
 
The Developers Conference 2014 - Oracle Keynote
The Developers Conference 2014 - Oracle KeynoteThe Developers Conference 2014 - Oracle Keynote
The Developers Conference 2014 - Oracle Keynote
 
Crie Aplicações Mobile Híbridas Escritas em Java, para iOS e Android
Crie Aplicações Mobile Híbridas Escritas em Java, para iOS e AndroidCrie Aplicações Mobile Híbridas Escritas em Java, para iOS e Android
Crie Aplicações Mobile Híbridas Escritas em Java, para iOS e Android
 
Oracle Cloud: Anything as a Service
Oracle Cloud: Anything as a ServiceOracle Cloud: Anything as a Service
Oracle Cloud: Anything as a Service
 
Servidores de Aplicação: por que ainda precisamos deles?
Servidores de Aplicação: por que ainda precisamos deles?Servidores de Aplicação: por que ainda precisamos deles?
Servidores de Aplicação: por que ainda precisamos deles?
 

Recently uploaded

Recently uploaded (20)

AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 

From GitHub Source to GitHub Release: Free CICD Pipelines For JavaFX Apps

  • 1. From GitHub Source to GitHub Release: Free CI/CD Pipelines for JavaFX Apps Bruno Borges Principal Product Manager, Java at Microsoft December 02, 2019
  • 2. Who am I? • Java Champion • JavaFX hobbyist/advocate • Java developer since 2001 • Principal Program/Product Manager • Java at Microsoft • Previously • Java Team Lead on the Azure Developer Relations Advocacy Group • Oracle: Product Manager for Developer Relations and Engagement Strategy @brunoborges /brunoborges
  • 3. Agenda Java at Microsoft Java Packaging Tools • Java 9+ and jlink • Java 14 and jpackage • Maven/Gradle support Microsoft CICD Overview • Intro to GitHub Actions and Azure DevOps JavaFX Apps – Live Demos • Building and Shipping
  • 5. Microsoft Depends Heavily on Java LinkedIn • Over 500+ Java microservices in production. • Over 60+ Java open source projects on GitHub. Azure • Services dependent on Java include primarily Azure HDInsight, Azure Databricks, and Azure Spring Cloud. SQL Server • Java now embedded out of the box (Azul Zulu). • PolyBase data visualization and Big Data Clusters interop with Spark, Hadoop connectors. • Java apps and JDBC connectors Yammer • Most of its back-end implemented in Java. Mojang’s Minecraft • Hundreds of servers built in Java. • Client Java Edition still very popular. Android • 1,000+ of MS developers who build native or Xamarin apps for Android still need Java on their dev environments and CI/CD pipelines. • New Surface Duo phone based on Android OS.
  • 7. Java on Azure: Free Commercial Support § Supported OS: Windows, Linux, MacOS § Supported Platforms: Microsoft Azure, Azure Stack § Upstream changes pushed to OpenJDK by Azul Systems JUL 2023 MAR 2025 SEP 2026 Available now, supported until… Available now PREVIEW
  • 8. DevOps Tools • Jenkins plugins for Azure and integration with Azure DevOps • Azure Pipelines • Supports Microsoft-hosted and self-hosted build agents • GitHub Actions • Supports GitHub-hosted and self-hosted build agents • Windows, Linux, and macOS hosted build agents for both services Azure Pipelines Azure DevOps
  • 9. From Code to OS Installers Azure Pipelines App.java Project Releases tab MSI, EXE DEB, RPM PKG, DMG Build Project and Installers Upload to Or anywhere else
  • 12. jlink – Create Custom Java Runtimes • Trims a Java Runtime to contain only required modules to run the app • Full JDK 13: 305 MB (expanded) • jlink’ed runtime: 25.5 MB (expanded) module myapp { requires java.logging; } jlink --module-path "$JAVA_HOME/jmods":target/classes --add-modules myapp --output jruntime/
  • 13. jpackage – Create OS Specific Packages • JEP 343 – jdk.java.net/jpackage/ • Under development on upcoming JDK 14 • Packages a Java application and the JRE on OS specific installers • DMG: 11 MB (compressed) jpackage --type dmg --dest target/installer --name mywebapp --module-path target/helloworld-1.0-SNAPSHOT.jar --module example.web/com.example.App
  • 14. Maven and Gradle Plugins • General support for JPMS/Jigsaw (Java 9+ modules) • Maven: core plugins support it • Gradle: not currently supported • Maven • jmod: maven.apache.org/plugins/maven-jmod-plugin • jlink: maven.apache.org/plugins/maven-jlink-plugin • jlink: github.com/raydac/mvn-jlink • jlink+jpackage: agilhard-oss.github.io/jlink-jpackager-maven-plugin/site/ • Gradle • badass-jlink-plugin.beryx.org/releases/latest
  • 15. Microsoft CICD Overview Azure DevOps, Azure Pipelines, and GitHub Actions
  • 16. Azure and GitHub Source control Based on Git Azure Repos GitHub CI/CD Based on the Azure Pipelines technology Code packages Based on standard, open package formats Azure Pipelines GitHub Actions Azure Artifacts GitHub Packages
  • 17. GitHub Actions and Azure Pipelines GitHub Actions is the modern CI/CD platform integrated into GitHub GitHub Actions is the best option for customers leveraging GitHub as their source control repository or looking to adopt modern CI/CD Actions powered by the community. Choose Azure Pipelines if your organization needs… • Support for Git repos outside of GitHub, or inside TFVC or Subversion. • Cloud-hosted functionality with data at rest outside of the US. • Continuous Delivery for containerized workloads with deep Kubernetes integration. • MLOps capabilities integrated with Azure Machine Learning.
  • 18. JavaFX Apps – Live Demos Building and Shipping
  • 19. Source code • 2048fx • github.com/brunoborges/fx2048 • CICD definition files • GitHub Actions: /.github/workflows/gradle.yml • Azure Pipelines: /build-job.yml • Gradle and jlink+jpackage: • /build.gradle • Custom GitHub Action • github.com/brunoborges/justextract • Simple Web App • github.com/brunoborges/simple-web-app
  • 20. Resources • GitHub Actions • Docs: help.github.com/en/actions • Source code of actions: github.com/actions • Setup Java Action: github.com/actions/setup-java • Azure Pipelines • Docs: docs.microsoft.com/azure/devops/pipelines/ • Source code of tasks: github.com/microsoft/azure-pipelines-tasks • Java Installer Task: github.com/microsoft/azure-pipelines- tasks/tree/master/Tasks/JavaToolInstallerV0