java web start czyli jak żyć z tą dziwną technologią? & continuous delivery w projekcie...
Post on 21-Jan-2018
152 Views
Preview:
TRANSCRIPT
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
</>
code
github.io
github.com travis-ci.org
codecov.io
bintray.com
oss.jfrog.org
search.maven.org
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
IceBoar project structure in details
Roche/IceBoar pom.xml (project name: ice-boar-build)
ice-boar (without reference to parent pom)
ice-boar-samples
ice-boar-demo-gh-pages
ice-boar-demo
ice-boar-hello-world-swing
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
Current IceBoar Build in details
cd ice-boarmvn clean deploy --settings settings.xmlcd ..mvn clean install -Ucd ice-boar-samples/ice-boar-demo-gh-pages/mvn clean install -P ghpagesgit clone https://github.com/Roche/IceBoarcd IceBoargit checkout gh-pages && \cp -R ../target/ice-boar-demo-gh-pages/* .
build-travis.sh Roche/IceBoar
ice-boar
ice-boar-samples
ice-boar-demo-gh-pages
ice-boar-demo
ice-boar-hello-world-swing
Current IceBoar Build in details
cd ice-boarmvn clean deploy --settings settings.xmlcd ..mvn clean install -Ucd ice-boar-samples/ice-boar-demo-gh-pages/mvn clean install -P ghpagesgit clone https://github.com/Roche/IceBoarcd IceBoargit checkout gh-pages && \cp -R ../target/ice-boar-demo-gh-pages/* .
build-travis.sh Roche/IceBoar
ice-boar
ice-boar-samples
ice-boar-demo-gh-pages
ice-boar-demo
ice-boar-hello-world-swing
Current IceBoar Build in details
cd ice-boarmvn clean deploy --settings settings.xmlcd ..mvn clean install -Ucd ice-boar-samples/ice-boar-demo-gh-pages/mvn clean install -P ghpagesgit clone https://github.com/Roche/IceBoarcd IceBoargit checkout gh-pages && \cp -R ../target/ice-boar-demo-gh-pages/* .
build-travis.sh Roche/IceBoar
ice-boar
ice-boar-samples
ice-boar-demo-gh-pages
ice-boar-demo
ice-boar-hello-world-swing
Current IceBoar Build in details
cd ice-boarmvn clean deploy --settings settings.xmlcd ..mvn clean install -Ucd ice-boar-samples/ice-boar-demo-gh-pages/mvn clean install -P ghpagesgit clone https://github.com/Roche/IceBoarcd IceBoargit checkout gh-pages && \cp -R ../target/ice-boar-demo-gh-pages/* .
build-travis.sh Roche/IceBoar
ice-boar
ice-boar-samples
ice-boar-demo-gh-pages
ice-boar-demo
ice-boar-hello-world-swing
IceBoar
Current IceBoar Build in details
cd ice-boarmvn clean deploy --settings settings.xmlcd ..mvn clean install -Ucd ice-boar-samples/ice-boar-demo-gh-pages/mvn clean install -P ghpagesgit clone https://github.com/Roche/IceBoarcd IceBoargit checkout gh-pages && \cp -R ../target/ice-boar-demo-gh-pages/* .
build-travis.sh Roche/IceBoar
ice-boar
ice-boar-samples
ice-boar-demo-gh-pages
ice-boar-demo
ice-boar-hello-world-swing
IceBoar
Current IceBoar Build in details
git config user.name "Marcin Stachniuk"git config user.email mstachniuk@...comgit add -Agit commit -m "update gh-pages by Travis-CI"git push ${GIT_HUB_REPO_SECRET}
build-travis.sh Roche/IceBoar
ice-boar
ice-boar-samples
ice-boar-demo-gh-pages
ice-boar-demo
ice-boar-hello-world-swing
IceBoar
Nice badges
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)
Bonus
LuxLekarz - LuxMed + ZnanyLekarz
github.com/mstachniuk/LuxLekarz
Mockito Release Tools
github.com/mockito/mockito-release-tools
https://github.com/mockito/mockito/blob/release/2.x/doc/release-notes/official.md
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ę!
top related