SlideShare ist ein Scribd-Unternehmen logo
1 von 19
Downloaden Sie, um offline zu lesen
Jacek Gębal
twitter: @GebalJacek
mail: jgebal@gmail.com
blog: oraclethoughts.com
Principal Software Engineer
@Fidelity Investments - Ireland
co-author & maintainer of: utPLSQL
Building free, open-source, PL/SQL projects in cloud
For Free!
About me
● Software engineer since ~2000 - mainly Oracle database
● Infected with testing and automation since ~2013
● Key contributor, author and maintainer of utPLSQL v3
● Active developer, learner, testing advocate
Why the talk
● #PASSTHEKNOWLEDGE
● What we’ve learned with
Free cloud CI ingredients
All of that for free!
● users / organizations
● projects
● issue tracker
● code reviews
● web-pages
● releases
● integrations / APIs
● ...
● up to 5 concurrent builds per ower
● AWS hosts (Linux/Win/Mac)
● ~`60GB of space for build (and growing)
● 4-8 GB RAM
● 2 cores
https://docs.travis-ci.com/user/reference/overview/
● images
● containers
● hub
● supported by most cloud CI services
● portability
● repeatability
https://docker-curriculum.com/
https://www.sonarsource.com/products/codeanalyzers/sonarplsql.html#_
http://utplsql.org/documentation/
https://github.com/utPLSQL/utPLSQL/releases
https://www.cheatography.com/jgebal/lists/utplsql-v3-cheat-sheets/
● Type-safe comparison
● Annotations for tests
● Expressive & readable expectations syntax
● Cursor / object / nested table / varray expectations
● Pure PL/SQL
● Human-readable reporting
● Integration with CI/CD servers (Jenkins/Travis/Teamcity/Oracle Developer Cloud)
● maven plugin / SQLDeveloper plugin
● community-driven, open-source
utPLSQL core
Annotation syntax - use in package specification only:
--%suite( description )
--%test( description )
Expectations - use in test procedures only:
ut.expect( actual_value ).to_( equal( 1 ) );
ut.expect( ‘Chuck’ ).to_equal( ‘Chuck’ );
Running tests:
SQL> exec ut.run( [options] );
cmd$> utplsql run user/pass@db [options...]
Expectations & matchers
● equal( expected )
● be_null / be_not_null
● be_true / be_false
● be_like( mask [, escape_char] )
● match( pattern [, modifiers] )
● contain( expected )
ut.expect( actual ).to_( matcher(param[, param...]) );
ut.expect( actual ).not_to( matcher(param[, param...]) );
● be_between( lower, upper )
● be_greater_than( expected )
● be_less_than( expected )
● be_greater_or_equal( expected )
● be_less_or_equal( expected )
● have_count( count ) / be_empty)
● .join_by()/.unordered()
● .unordered_columns()
● .include()/.exclude()
Matchers:
Local toolset
● Why git ?
● Why IntelliJ
● Sonar Local analysis
● Test test test!
● Commit
● Push
● Let the CI server do the work
● Open a Pull Request
● Review code
● Improve & Merge or Reject pull request
Local toolset
● Write code
● Realtime code analysis
● Deploy / compile locally
● Test
● Commit
● Push
● Let the CI server do the work
● Open a Pull Request
● Review code
● Improve & Merge or Reject pull request
Working locally
Jetbrains values open-source
● git - https://git-scm.com/download/win
○ https://www.youtube.com/playlist?list=PL25b72h8A54cRytndfLG8LAFXnw-9X6Lk
○ https://www.atlassian.com/git/tutorials
● docker - https://docs.docker.com/docker-for-windows/
○ https://github.com/wsargent/docker-cheat-sheet
● oracle DB on docker - https://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
○ https://github.com/oracle/docker-images/tree/master/OracleDatabase
● IntelliJ community edition - https://www.jetbrains.com/idea/download/
○ https://www.shortcutfoo.com/app/dojos/intellij-idea-win/cheatsheet
○ https://blog.jetbrains.com/idea/category/tutorials/
● SQLDeveloper - https://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html
○ https://www.youtube.com/watch?v=EguMf4HbPU8&t=6s
● sonarlint
○ https://www.sonarlint.org/
○ https://rollout.io/blog/getting-started-sonarqube-sonarlint/
Downloading & learning
● utPLSQL - https://github.com/utPLSQL/utPLSQL/releases
○ http://utplsql.org/
○ https://www.youtube.com/playlist?list=PL25b72h8A54fbucEfvH3C2Q1yMqGhc15o
○ https://vimeo.com/261135676
● github - https://github.com/
○ https://guides.github.com/activities/hello-world/
● dockerhub https://hub.docker.com/
○ https://docs.docker.com/docker-hub/
● travis
○ https://docs.travis-ci.com/
○ https://docs.travis-ci.com/user/tutorial/
○ https://github.com/utPLSQL/utPLSQL-demo-project
● sonarclud - https://sonarcloud.io
○ https://sonarcloud.io/documentation/integrations/github/
Learning
That’s all folks
Thank you

Weitere ähnliche Inhalte

Was ist angesagt?

JavaScript: Patterns, Part 3
JavaScript: Patterns, Part  3JavaScript: Patterns, Part  3
JavaScript: Patterns, Part 3
Chris Farrell
 
Shiny r, live shared and explored
Shiny   r, live shared and exploredShiny   r, live shared and explored
Shiny r, live shared and explored
Alex Brown
 

Was ist angesagt? (19)

Dmytro Dziubenko "Developer's toolchain"
Dmytro Dziubenko "Developer's toolchain"Dmytro Dziubenko "Developer's toolchain"
Dmytro Dziubenko "Developer's toolchain"
 
JavaScript global object, execution contexts & closures
JavaScript global object, execution contexts & closuresJavaScript global object, execution contexts & closures
JavaScript global object, execution contexts & closures
 
Angular testing
Angular testingAngular testing
Angular testing
 
Front-end God Mode with Reagent and Figwheel
Front-end God Mode with Reagent and FigwheelFront-end God Mode with Reagent and Figwheel
Front-end God Mode with Reagent and Figwheel
 
Javascript unit tests with angular 1.x
Javascript unit tests with angular 1.xJavascript unit tests with angular 1.x
Javascript unit tests with angular 1.x
 
Fuzzing softwares for bugs - OWASP Seasides
Fuzzing softwares for bugs - OWASP SeasidesFuzzing softwares for bugs - OWASP Seasides
Fuzzing softwares for bugs - OWASP Seasides
 
JavaScript: Patterns, Part 3
JavaScript: Patterns, Part  3JavaScript: Patterns, Part  3
JavaScript: Patterns, Part 3
 
Roslyn
RoslynRoslyn
Roslyn
 
Unit Testing JavaScript Applications
Unit Testing JavaScript ApplicationsUnit Testing JavaScript Applications
Unit Testing JavaScript Applications
 
JavaScript Execution Context
JavaScript Execution ContextJavaScript Execution Context
JavaScript Execution Context
 
Gtg12
Gtg12Gtg12
Gtg12
 
JavaScript徹底整理セミナー "今から始める人も、整理したい人も"
JavaScript徹底整理セミナー "今から始める人も、整理したい人も"JavaScript徹底整理セミナー "今から始める人も、整理したい人も"
JavaScript徹底整理セミナー "今から始める人も、整理したい人も"
 
JavaScript Object Oriented Programming Cheat Sheet
JavaScript Object Oriented Programming Cheat SheetJavaScript Object Oriented Programming Cheat Sheet
JavaScript Object Oriented Programming Cheat Sheet
 
Introduction to Object Oriented Javascript
Introduction to Object Oriented JavascriptIntroduction to Object Oriented Javascript
Introduction to Object Oriented Javascript
 
Testing of React JS app
Testing of React JS appTesting of React JS app
Testing of React JS app
 
Shiny r, live shared and explored
Shiny   r, live shared and exploredShiny   r, live shared and explored
Shiny r, live shared and explored
 
Jenkins api
Jenkins apiJenkins api
Jenkins api
 
Davide Cerbo - Kotlin loves React - Codemotion Milan 2018
Davide Cerbo - Kotlin loves React - Codemotion Milan 2018Davide Cerbo - Kotlin loves React - Codemotion Milan 2018
Davide Cerbo - Kotlin loves React - Codemotion Milan 2018
 
Utilising the data attribute
Utilising the data attributeUtilising the data attribute
Utilising the data attribute
 

Ähnlich wie OUG Ireland 2019 - building free, open-source, PL/SQL products in cloud

Validating Big Data Jobs—Stopping Failures Before Production on Apache Spark...
 Validating Big Data Jobs—Stopping Failures Before Production on Apache Spark... Validating Big Data Jobs—Stopping Failures Before Production on Apache Spark...
Validating Big Data Jobs—Stopping Failures Before Production on Apache Spark...
Databricks
 
Beyond unit tests: Deployment and testing for Hadoop/Spark workflows
Beyond unit tests: Deployment and testing for Hadoop/Spark workflowsBeyond unit tests: Deployment and testing for Hadoop/Spark workflows
Beyond unit tests: Deployment and testing for Hadoop/Spark workflows
DataWorks Summit
 
Validating big data jobs - Spark AI Summit EU
Validating big data jobs  - Spark AI Summit EUValidating big data jobs  - Spark AI Summit EU
Validating big data jobs - Spark AI Summit EU
Holden Karau
 

Ähnlich wie OUG Ireland 2019 - building free, open-source, PL/SQL products in cloud (20)

POUG Meetup 1st MArch 2019 - utPLSQL v3 - Testing Framework for PL/SQL
POUG Meetup 1st MArch 2019 - utPLSQL v3 - Testing Framework for PL/SQLPOUG Meetup 1st MArch 2019 - utPLSQL v3 - Testing Framework for PL/SQL
POUG Meetup 1st MArch 2019 - utPLSQL v3 - Testing Framework for PL/SQL
 
Ukoug webinar - testing PLSQL APIs with utPLSQL v3
Ukoug webinar - testing PLSQL APIs with utPLSQL v3Ukoug webinar - testing PLSQL APIs with utPLSQL v3
Ukoug webinar - testing PLSQL APIs with utPLSQL v3
 
Testing with Express, Mocha & Chai
Testing with Express, Mocha & ChaiTesting with Express, Mocha & Chai
Testing with Express, Mocha & Chai
 
EuroPython 2013 - FAST, DOCUMENTED AND RELIABLE JSON BASED WEBSERVICES WITH P...
EuroPython 2013 - FAST, DOCUMENTED AND RELIABLE JSON BASED WEBSERVICES WITH P...EuroPython 2013 - FAST, DOCUMENTED AND RELIABLE JSON BASED WEBSERVICES WITH P...
EuroPython 2013 - FAST, DOCUMENTED AND RELIABLE JSON BASED WEBSERVICES WITH P...
 
PyconIE 2016 - Kajiki, the fast and validated template engine your were looki...
PyconIE 2016 - Kajiki, the fast and validated template engine your were looki...PyconIE 2016 - Kajiki, the fast and validated template engine your were looki...
PyconIE 2016 - Kajiki, the fast and validated template engine your were looki...
 
Dart the better Javascript 2015
Dart the better Javascript 2015Dart the better Javascript 2015
Dart the better Javascript 2015
 
Handout: 'Open Source Tools & Resources'
Handout: 'Open Source Tools & Resources'Handout: 'Open Source Tools & Resources'
Handout: 'Open Source Tools & Resources'
 
Validating Big Data Jobs—Stopping Failures Before Production on Apache Spark...
 Validating Big Data Jobs—Stopping Failures Before Production on Apache Spark... Validating Big Data Jobs—Stopping Failures Before Production on Apache Spark...
Validating Big Data Jobs—Stopping Failures Before Production on Apache Spark...
 
Beyond unit tests: Deployment and testing for Hadoop/Spark workflows
Beyond unit tests: Deployment and testing for Hadoop/Spark workflowsBeyond unit tests: Deployment and testing for Hadoop/Spark workflows
Beyond unit tests: Deployment and testing for Hadoop/Spark workflows
 
Webbisauna - ClojureScript for Javascript Developers
Webbisauna - ClojureScript for Javascript DevelopersWebbisauna - ClojureScript for Javascript Developers
Webbisauna - ClojureScript for Javascript Developers
 
Go debugging and troubleshooting tips - from real life lessons at SignalFx
Go debugging and troubleshooting tips - from real life lessons at SignalFxGo debugging and troubleshooting tips - from real life lessons at SignalFx
Go debugging and troubleshooting tips - from real life lessons at SignalFx
 
202107 - Orion introduction - COSCUP
202107 - Orion introduction - COSCUP202107 - Orion introduction - COSCUP
202107 - Orion introduction - COSCUP
 
Web App Prototypes with Google App Engine
Web App Prototypes with Google App EngineWeb App Prototypes with Google App Engine
Web App Prototypes with Google App Engine
 
Dart the Better JavaScript
Dart the Better JavaScriptDart the Better JavaScript
Dart the Better JavaScript
 
Eko10 workshop - OPEN SOURCE DATABASE MONITORING
Eko10 workshop - OPEN SOURCE DATABASE MONITORINGEko10 workshop - OPEN SOURCE DATABASE MONITORING
Eko10 workshop - OPEN SOURCE DATABASE MONITORING
 
POUG2019 - Test your PL/SQL - your database will love you
POUG2019 - Test your PL/SQL - your database will love youPOUG2019 - Test your PL/SQL - your database will love you
POUG2019 - Test your PL/SQL - your database will love you
 
Scaling Magento
Scaling MagentoScaling Magento
Scaling Magento
 
DevOpsDays Taipei 2019 - Mastering IaC the DevOps Way
DevOpsDays Taipei 2019 - Mastering IaC the DevOps WayDevOpsDays Taipei 2019 - Mastering IaC the DevOps Way
DevOpsDays Taipei 2019 - Mastering IaC the DevOps Way
 
"Xapi-lang For declarative code generation" By James Nelson
"Xapi-lang For declarative code generation" By James Nelson"Xapi-lang For declarative code generation" By James Nelson
"Xapi-lang For declarative code generation" By James Nelson
 
Validating big data jobs - Spark AI Summit EU
Validating big data jobs  - Spark AI Summit EUValidating big data jobs  - Spark AI Summit EU
Validating big data jobs - Spark AI Summit EU
 

Kürzlich hochgeladen

introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 

Kürzlich hochgeladen (20)

Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456LEVEL 5   - SESSION 1 2023 (1).pptx - PDF 123456
LEVEL 5 - SESSION 1 2023 (1).pptx - PDF 123456
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Pharm-D Biostatistics and Research methodology
Pharm-D Biostatistics and Research methodologyPharm-D Biostatistics and Research methodology
Pharm-D Biostatistics and Research methodology
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 

OUG Ireland 2019 - building free, open-source, PL/SQL products in cloud

  • 1. Jacek Gębal twitter: @GebalJacek mail: jgebal@gmail.com blog: oraclethoughts.com Principal Software Engineer @Fidelity Investments - Ireland co-author & maintainer of: utPLSQL Building free, open-source, PL/SQL projects in cloud For Free!
  • 2. About me ● Software engineer since ~2000 - mainly Oracle database ● Infected with testing and automation since ~2013 ● Key contributor, author and maintainer of utPLSQL v3 ● Active developer, learner, testing advocate
  • 3. Why the talk ● #PASSTHEKNOWLEDGE ● What we’ve learned with
  • 4. Free cloud CI ingredients
  • 5. All of that for free!
  • 6. ● users / organizations ● projects ● issue tracker ● code reviews ● web-pages ● releases ● integrations / APIs ● ...
  • 7. ● up to 5 concurrent builds per ower ● AWS hosts (Linux/Win/Mac) ● ~`60GB of space for build (and growing) ● 4-8 GB RAM ● 2 cores https://docs.travis-ci.com/user/reference/overview/
  • 8. ● images ● containers ● hub ● supported by most cloud CI services ● portability ● repeatability https://docker-curriculum.com/
  • 10. http://utplsql.org/documentation/ https://github.com/utPLSQL/utPLSQL/releases https://www.cheatography.com/jgebal/lists/utplsql-v3-cheat-sheets/ ● Type-safe comparison ● Annotations for tests ● Expressive & readable expectations syntax ● Cursor / object / nested table / varray expectations ● Pure PL/SQL ● Human-readable reporting ● Integration with CI/CD servers (Jenkins/Travis/Teamcity/Oracle Developer Cloud) ● maven plugin / SQLDeveloper plugin ● community-driven, open-source
  • 11. utPLSQL core Annotation syntax - use in package specification only: --%suite( description ) --%test( description ) Expectations - use in test procedures only: ut.expect( actual_value ).to_( equal( 1 ) ); ut.expect( ‘Chuck’ ).to_equal( ‘Chuck’ ); Running tests: SQL> exec ut.run( [options] ); cmd$> utplsql run user/pass@db [options...]
  • 12. Expectations & matchers ● equal( expected ) ● be_null / be_not_null ● be_true / be_false ● be_like( mask [, escape_char] ) ● match( pattern [, modifiers] ) ● contain( expected ) ut.expect( actual ).to_( matcher(param[, param...]) ); ut.expect( actual ).not_to( matcher(param[, param...]) ); ● be_between( lower, upper ) ● be_greater_than( expected ) ● be_less_than( expected ) ● be_greater_or_equal( expected ) ● be_less_or_equal( expected ) ● have_count( count ) / be_empty) ● .join_by()/.unordered() ● .unordered_columns() ● .include()/.exclude() Matchers:
  • 14. ● Why git ? ● Why IntelliJ ● Sonar Local analysis ● Test test test! ● Commit ● Push ● Let the CI server do the work ● Open a Pull Request ● Review code ● Improve & Merge or Reject pull request Local toolset
  • 15. ● Write code ● Realtime code analysis ● Deploy / compile locally ● Test ● Commit ● Push ● Let the CI server do the work ● Open a Pull Request ● Review code ● Improve & Merge or Reject pull request Working locally
  • 17. ● git - https://git-scm.com/download/win ○ https://www.youtube.com/playlist?list=PL25b72h8A54cRytndfLG8LAFXnw-9X6Lk ○ https://www.atlassian.com/git/tutorials ● docker - https://docs.docker.com/docker-for-windows/ ○ https://github.com/wsargent/docker-cheat-sheet ● oracle DB on docker - https://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html ○ https://github.com/oracle/docker-images/tree/master/OracleDatabase ● IntelliJ community edition - https://www.jetbrains.com/idea/download/ ○ https://www.shortcutfoo.com/app/dojos/intellij-idea-win/cheatsheet ○ https://blog.jetbrains.com/idea/category/tutorials/ ● SQLDeveloper - https://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html ○ https://www.youtube.com/watch?v=EguMf4HbPU8&t=6s ● sonarlint ○ https://www.sonarlint.org/ ○ https://rollout.io/blog/getting-started-sonarqube-sonarlint/ Downloading & learning
  • 18. ● utPLSQL - https://github.com/utPLSQL/utPLSQL/releases ○ http://utplsql.org/ ○ https://www.youtube.com/playlist?list=PL25b72h8A54fbucEfvH3C2Q1yMqGhc15o ○ https://vimeo.com/261135676 ● github - https://github.com/ ○ https://guides.github.com/activities/hello-world/ ● dockerhub https://hub.docker.com/ ○ https://docs.docker.com/docker-hub/ ● travis ○ https://docs.travis-ci.com/ ○ https://docs.travis-ci.com/user/tutorial/ ○ https://github.com/utPLSQL/utPLSQL-demo-project ● sonarclud - https://sonarcloud.io ○ https://sonarcloud.io/documentation/integrations/github/ Learning