Java Web Start czyli jak żyć z tą dziwną technologią? & Continuous Delivery w projekcie Open...

Post on 21-Jan-2018

152 views 0 download

Transcript of Java Web Start czyli jak żyć z tą dziwną technologią? & Continuous Delivery w projekcie Open...

Java Web Start czyli jak żyć z tą dziwną technologią? &Continuous Delivery w projekcie Open Source Marcin Stachniuk@MarcinStachniukmstachniuk.blogspot.com

JUG Łódź 20.04.2017

O mnie

● Marcin Stachniuk● Twitter: @MarcinStachniuk● Blog: mstachniuk.blogspot.com● WrocJUG● Recenzent książki Practical Unit Testing● Speker na konferencjach: 33rd degree 4

charity, dbconf.pl, warsjawa.pl, devcrowd.pl, chamberconf.pl, careercon.pl, itcareersummit.pl

● Mockito release tools team member● Chorąży na ChamberConf

DEVCROWDSzczecin, 22 kwietnia 2017

Agenda

● Introduction● Build Pipeline● Continuous Integration● Continuous Delivery● Code Quality● Nice Badges● Promotion in the Internet● Alternatives● Q&A● Bonuses

● What is Java Web Start?● How it works?● What can go wrong?● Solution● How does IceBoar works?● Benefits● Q&A

Agenda

● Introduction● Build Pipeline● Continuous Integration● Continuous Delivery● Code Quality● Nice Badges● Promotion in the Internet● Alternatives● Q&A● Bonuses

● What is Java Web Start?● How it works?● What can go wrong?● Solution● How does IceBoar works?● Benefits● Q&A +

Agenda

● Introduction● Build Pipeline● Continuous Integration● Continuous Delivery● Code Quality● Nice Badges● Promotion in the Internet● Alternatives● Q&A● Bonuses

+

● What is Java Web Start?● How it works?● What can go wrong?● Solution● How does IceBoar works?● Benefits● Q&A

Java Web Start – jak żyć z tą dziwną technologią?Marcin Stachniuk

Java Platform Standard Edition 8 Documentation

https://docs.oracle.com/javase/8/docs/

Java Platform Tutorial: Swing

https://docs.oracle.com/javase/tutorial/uiswing/components/text.html

Example JNLP file

<?xml version="1.0" encoding="utf-8"?>

<!-- JNLP File for TextSamplerDemo --><jnlp spec="1.0+" codebase="https://docs.oracle.com/javase/tutorialJWS/samples/uiswing/TextSamplerDemoProject" href="TextSamplerDemo.jnlp"> <information> <title>TextSamplerDemo</title> <vendor>The Java(tm) Tutorial</vendor> <homepage href="https://docs.oracle.com/javase/tutorial/uiswing/examples/components/index.html#TextSamplerDemo"/> <description>TextSamplerDemo</description> <description kind="short">Uses one of each of Swing's text components.</description> <offline-allowed/> </information> <resources> <j2se version="1.7+"/> <jar href="TextSamplerDemo.jar"/> </resources> <application-desc main-class="components.TextSamplerDemo"/></jnlp>

Java Web Start Sequence Diagram

Java Web Start Sequence Diagram

click

Java Web Start Sequence Diagram

click download

Java Web Start Sequence Diagram

click downloadrun

Java Web Start Sequence Diagram

click downloadrun

are you sure?

Java Web Start Sequence Diagram

click downloadrun

are you sure?download

JARs

Java Web Start Sequence Diagram

run applicationon javaws

click downloadrun

are you sure?download

JARs

Java Web Start Sequence Diagram

run applicationon javaws

click downloadrun

are you sure?download

JARs

What could possibly go wrong?

In JNLP: <j2se version="1.7"/> User: Java 1.8

What could possibly go wrong?

● Different Java versions installed on client machines● Sometimes javaws wants download and install latest JRE

version● Different behavior depending on Operating System and

installed JRE version● From some point of time apps needs to signed (Self-signed

are blocked)● Application started in sandbox (javaws or jp2launcher)

Problem solution

Problem solution

Problem solution

https://github.com/Roche/IceBoar

How IceBoar works?

How IceBoar works?

click

How IceBoar works?

click download

How IceBoar works?

click download run

How IceBoar works?

click download run

are you sure?

How IceBoar works?

click download run

are you sure?

download& run

How IceBoar works?

click download run

are you sure?

download& run download JRE

How IceBoar works?

click download run

are you sure?

download& run download JRE

download JARs

How IceBoar works?

click download run

are you sure?

download& run download JRE

download JARs

run onour JRE

How IceBoar works?

click download run

are you sure?

download& run download JRE

download JARs

run onour JRE

How IceBoar works?

click download run

are you sure?

download& run download JRE

download JARs

run onour JRE

Demo

Profits

● We know a target JVM version● Application start outside a sandbox (java instead of

javaws)● We sign only IceBoar jar● Users don’t need admin rights to install JRE

How to introduce IceBoar into a project?

<dependency> <groupId>com.roche</groupId> <artifactId>ice-boar</artifactId> <version>${project.version}</version> <classifier>jar-with-dependencies</classifier></dependency>

How to introduce IceBoar into a project?

<jnlp spec="1.0+" codebase="${codebase}"> <information> .... </information> <security> <all-permissions/> </security> <resources> <j2se version="1.5+" href="http://java.sun.com/products/autodl/j2se"/> <jar href="${jre.and.jars.host}/${jars.path}/ice-boar-1.0-jar-with-dependencies.jar"/>

<property name="jnlp.IceBoar.close-on-end" value="false"/> <property name="jnlp.IceBoar.main-class" value="com.roche.iceboar.helloworldswing.HelloWorld"/> <property name="jnlp.IceBoar.jar.0" value="${jre.and.jars.host}/${jars.path}/ice-boar-hello-world-swing-${version}-jar-with-dependencies.jar"/>

<property name="jnlp.IceBoar.splash" value="${jre.and.jars.host}/img/ice-boar-splash.png"/> </resources>

<application-desc main-class="com.roche.iceboar.IceBoar"> </application-desc></jnlp>

Site with examples

http://roche.github.io/IceBoar/

Other features of IceBoar?

● Custom splash screen during loading● No frame around splash screen● Custom title and icon● Starting application using pre-installed JRE● Cache for downloaded JRE (for slow connections)● Window with logs output● Disable auto closing IceBoar window after starting target

application

Questions

?

Continuous Delivery w projekcie Open Source

Continuous Delivery Vs. Continuous Deployment

Continuous Delivery Vs. Continuous Deployment

https://puppet.com/blog/continuous-delivery-vs-continuous-deployment-what-s-diff

Inspiration

JDD2014: Continuous Delivery: Capitalizing High Quality Automated Tests (Sz. Faber)

https://www.youtube.com/watch?v=Lda4RuQDQN0

Build Pipeline

Continuous Delivery

</>

Continuous Delivery

</>

Continuous Delivery

</>

1 git push

Continuous Delivery

</>

1 git push

2 webhookbuild

Continuous Delivery

</>

1 git push

2 webhookbuild

3 deploy

release

snapshot

Continuous Delivery

</>

1 git push

2 webhookbuild

3 deploy

release

snapshot

4 commit to

gh-pages

Continuous Delivery

</>

1 git push

2 webhookbuild

3 deploy

release

snapshot

4 commit to

gh-pages

5 updategh-pages

Continuous Delivery

</>

1 git push

2 webhookbuild

3 deploy

release

snapshot

6 code coverage

4 commit to

gh-pages

5 updategh-pages

Continuous Delivery

</>

1 git push

2 webhookbuild

3 deploy

release

snapshot

6 code coverage

7 sing & publish(manual)

4 commit to

gh-pages

5 updategh-pages

Continuous Delivery Deployment

</>

1 git push

2 webhookbuild

3 deploy

release

snapshot

6 code coverage

7 sing & publish(manual)

4 commit to

gh-pages

5 updategh-pages

7 sing & publishauto

not implementeddream

Continuous Integration

Continuous Integration

https://travis-ci.org● Free for Open Source Projects● Easy setup with GitHub● Container based architecture (Doker)● Stateless

Continuous Integration

https://travis-ci.org● Free for Open Source Projects● Easy setup with GitHub● Container based architecture (Doker)● Stateless● Multi language support (ANDROID, C, C#, C++, CLOJURE,

CRYSTAL, D, DART, ERLANG, ELIXIR, F#, GO, GROOVY, HASKELL, HAXE, JAVA, JAVASCRIPT (WITH NODE.JS), JULIA, OBJECTIVE-C, PERL, PERL6, PHP, PYTHON, R, RUBY, RUST, SCALA, SMALLTALK, VISUAL BASIC)

● For Java: Oracle JDK 7 (default), Oracle JDK 8, OpenJDK 6, OpenJDK 7, Gradle 2.0, Maven 3.2 and Ant 1.8

● Notifications via: Slack, HipChat, Emails and more

How to set up Travis-CI

.travis.ymllanguage: javascript: mvn clean installjdk: - oraclejdk8

● Sign in to travis-ci.org using GitHub account● Choose project (you need to have admin rights to this project)● Add .travis.yml to your root project folder

Default Travis-CI java build

.travis.ymllanguage: javajdk: - oraclejdk8

.travis.ymllanguage: javainstall: mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -Vscript: mvn test -Bjdk: - oraclejdk8

Default Travis-CI maven build seps:● install● script

Default Travis-CI java build

.travis.ymllanguage: javajdk: - oraclejdk8

.travis.ymllanguage: javainstall: mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -Vscript: mvn test -Bjdk: - oraclejdk8

Default Travis-CI maven build seps:● install● script

Default Travis-CI java build

.travis.ymllanguage: javajdk: - oraclejdk8

.travis.ymllanguage: javainstall: mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -Vscript: mvn test -Bjdk: - oraclejdk8

Default Travis-CI maven build seps:● install● script

Store sensitive data (passwords) on travis-ci

<settings ...>

<servers> <server> <id>bintray-stachnim-IceBoar</id> <username>${env.CI_DEPLOY_USERNAME}</username> <password>${env.CI_DEPLOY_PASSWORD}</password> </server>

settings.xml

Store sensitive data (passwords) on travis-ci

Store sensitive data (passwords) on travis-ci

Current IceBoar Build in nutshell

#!/bin/bashset -evif [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then

cd ice-boar && mvn clean deploy --settings …else

cd ice-boar && mvn clean install && ...fi

build-travis.sh

language: javascript: ./build-travis.shjdk: - oraclejdk8

.travis.yml

Continuous Delivery

Release artifact to Maven Central is not so easy

● Hard to sign in / create account (need to find link and create an issue)● Manual verification of uploaded artifact

Release artifact to Maven Central is not so easy

Complicated Requirements:● Supply Javadoc and Sources● Sign Files with GPG/PGP● Sufficient Metadata (pom file)● Correct Coordinates (groupId, artifactId, version)● Project Name, Description and URL● License Information● Developer Information● SCM Information

Release artifact to bintray

● Sign in with GitHub● Add new package to maven repository, configure it● Deploy to bintray (from Travis-CI)● You don’t need to sign your artifact

Bintray general repository settings

Bintray deploy to Maven Central

● You can’t store user token password :-( ● This will be manual step :-(

Google Developers: The Secret to Safe Continuous Deployment

www.youtube.com/watch?v=UMnZiTL0tUc github.com/bslatkin/dpxdt

Code Quality

Code Quality with codecov.io

● Sign in to codecov.io with GitHub● Configure jacoco-maven-plugin● Add to .travis.yml:

language: javascript: ./build-travis.shjdk: - oraclejdk8before_install: - pip install --user codecovafter_success: - codecov

.travis.yml

Codecov see Code Coverage

Codecov Extension (for Chrome) - see coverage on GitHub

https://chrome.google.com/webstore/detail/codecov-extension/

Codecov suggestions

IceBoar build in details

Current IceBoar Build in details

language: javascript: ./build-travis.shjdk: - oraclejdk8before_install: - pip install --user codecovafter_success: - codecovcache: directories: - $HOME/.m2 // cache dir between buildsinstall: true // skip install script

.travis.yml

Current IceBoar Build in details

#!/bin/bashset -evif [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then ...else cd ice-boar mvn clean install cd .. mvn clean install -Ufi

build-travis.sh

set -ev

-e fail fast

-v print all lines in the script before executing them

Nice badges

Nice badges

shields.io

Promotion in the Internet

What is important for users?

● Nice demo page with example usage: roche.github.io/IceBoar/

What is important for users?

● Easy setup for contributors

What is important for promotion?

● Stack Overflow: stackoverflow.com/search?q=ice+boar

How to promote in the Internet?

● Blogposts● Another forums, groups, etc.● Hackergarten (1 Pull Request,1 commit, 2 contributors)● Presentations at JUG’s and conferences● Coding in train (1 Pull Request, 16 commits, 1 contributor)

Alternatives

Alternatives to Travic-CI

● gitlab.com● BitBucket host in the cloud● teamcity.codebetter.com/login.html● teamcity.jetbrains.com● www.appveyor.com (for .NET)● scrutinizer-ci.com (+ code metrics)● codeship.com (run Docker’s, support for: Ruby (Rails), Node.js, PHP, Python,

Java, Go)● magnum-ci.com (+ code metrics)● circleci.com● www.visualstudio.com/en-us/products/visual-studio-team-services-vs.aspx● app.shippable.com (support for Ruby, Python, Java, Node.js, Scala, PHP,

Clojure, Go)● www.snap-ci.com (by ThoughtWorks)

Alternatives for codecov.io

● coveralls.io● nemo.sonarqube.org (BETA - need to write an e-mail on e-mail list for account)● sonar.qatools.ru● coverity.com (for: C, C++, C#, Java)● www.codacy.com (for Scala, Ruby, Java, JavaScript, Python, Php)

Others

● javadoc.io

Bonus

LuxLekarz - LuxMed + ZnanyLekarz

github.com/mstachniuk/LuxLekarz

Mockito Release Tools Vision

github.com/mockito/mockito-release-tools

● Easy setup● Auto generation of release notes (notable and regular)● Include contributors in pom.xml● Auto update releases on GitHub● CI create git tag, update release notes in repository, bump version● Release artifacts only when binary was changed● Million of users ;-)

Questions

?

Links

● https://puppet.com/blog/continuous-delivery-vs-continuous-deployment-what-s-diff Continuous Delivery Vs. Continuous Deployment: What's the Diff?

● https://www.youtube.com/watch?v=Lda4RuQDQN0 Szczepan Faber about Continuous Delivery● https://docs.oracle.com/javase/8/docs/ Java Platform Standard Edition 8 Documentation● https://github.com/Roche/IceBoar IceBoar on GitHub● https://github.com GitHub Source Code repository● https://github.io GitHub Pages● https://travis-ci.org Travis-CI Continuous Integration Server● https://codecov.io Collect your code coverage● https://bintray.com Popular repository for your artifacts (not only Jar files)● https://oss.jfrog.org Repository for OSS snapshots● https://search.maven.org The Maven Central● https://docs.travis-ci.com/user/pull-requests#Security-Restrictions-when-testing-Pull-Requests Why sometimes

PR from fork fail on Travis-Ci● http://central.sonatype.org/pages/requirements.html Requirements for release in to Maven Central● https://issues.sonatype.org Create issue for new account on Maven Central● https://www.youtube.com/watch?v=UMnZiTL0tUc Google Developers The Secret to Safe Continuous Deployment ● https://chrome.google.com/webstore/detail/codecov-extension Codecov extension (for Google Chrome)● http://shields.io Nice badges generator● https://roche.github.io/IceBoar Demo page for IceBoar● http://stackoverflow.com/search?q=ice+boar IceBoar on Stack Overflow

Java Web Start czyli jak żyć z tą dziwną technologią? &Continuous Delivery w projekcie Open Source Marcin Stachniuk@MarcinStachniukmstachniuk.blogspot.com

JUG Łódź 20.04.2017 Dzięku

ję!