From 47c195805f96e41d3cc1379ebb39289899a06cc4 Mon Sep 17 00:00:00 2001 From: Oliver Nocon Date: Tue, 11 Jul 2017 15:12:03 +0200 Subject: [PATCH] Initial version of piper-lib. --- .editorconfig | 13 + .gitignore | 16 + CONTRIBUTING.md | 151 +++++++ README.md | 15 + documentation/docs/css/extra.css | 7 + documentation/docs/images/favicon.ico | Bin 0 -> 164038 bytes documentation/docs/images/logo.png | Bin 0 -> 108517 bytes documentation/docs/images/neo_credentials.png | Bin 0 -> 123893 bytes documentation/docs/images/piper_doc.png | Bin 0 -> 24788 bytes .../docs/images/piper_head_white.png | Bin 0 -> 2239 bytes documentation/docs/images/piper_rollout.png | Bin 0 -> 61328 bytes documentation/docs/images/setupInJenkins.png | Bin 0 -> 22093 bytes documentation/docs/index.md | 71 ++++ documentation/docs/jenkins/requiredPlugins.md | 57 +++ documentation/docs/scripts/fileUtils.md | 62 +++ documentation/docs/scripts/utils.md | 75 ++++ documentation/docs/scripts/version.md | 161 ++++++++ .../docs/steps/commonPipelineEnvironment.md | 141 +++++++ .../getConfigProperties.md | 26 ++ .../getConfigProperty.md | 30 ++ .../getMtarFileName.md | 26 ++ .../setConfigProperties.md | 33 ++ .../setConfigProperty.md | 34 ++ .../setMtarFileName.md | 31 ++ .../docs/steps/handlePipelineStepErrors.md | 63 +++ documentation/docs/steps/mtaBuild.md | 45 +++ documentation/docs/steps/neoDeploy.md | 61 +++ .../steps/setupCommonPipelineEnvironment.md | 40 ++ documentation/docs/steps/toolValidate.md | 33 ++ documentation/mkdocs.yml | 38 ++ pom.xml | 252 ++++++++++++ src/com/sap/piper/FileUtils.groovy | 21 + src/com/sap/piper/Utils.groovy | 37 ++ src/com/sap/piper/Version.groovy | 52 +++ template/step.groovy | 21 + template/step.md | 33 ++ test/groovy/FileUtilsTest.groovy | 93 +++++ test/groovy/MTABuildTest.groovy | 368 ++++++++++++++++++ test/groovy/NeoDeploymentTest.groovy | 309 +++++++++++++++ test/groovy/ProjectSource.groovy | 39 ++ test/groovy/ToolValidateTest.groovy | 326 ++++++++++++++++ test/groovy/VersionTest.groovy | 192 +++++++++ test/java/AbstractJenkinsTest.java | 39 ++ test/java/AcmeTest.java | 91 +++++ test/java/_TemplateTest.java | 40 ++ vars/commonPipelineEnvironment.groovy | 27 ++ vars/handlePipelineStepErrors.groovy | 44 +++ vars/mtaBuild.groovy | 63 +++ vars/neoDeploy.groovy | 78 ++++ vars/setupCommonPipelineEnvironment.groovy | 14 + vars/toolValidate.groovy | 74 ++++ 51 files changed, 3442 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 CONTRIBUTING.md create mode 100644 README.md create mode 100644 documentation/docs/css/extra.css create mode 100644 documentation/docs/images/favicon.ico create mode 100644 documentation/docs/images/logo.png create mode 100644 documentation/docs/images/neo_credentials.png create mode 100644 documentation/docs/images/piper_doc.png create mode 100644 documentation/docs/images/piper_head_white.png create mode 100644 documentation/docs/images/piper_rollout.png create mode 100755 documentation/docs/images/setupInJenkins.png create mode 100644 documentation/docs/index.md create mode 100644 documentation/docs/jenkins/requiredPlugins.md create mode 100644 documentation/docs/scripts/fileUtils.md create mode 100644 documentation/docs/scripts/utils.md create mode 100644 documentation/docs/scripts/version.md create mode 100644 documentation/docs/steps/commonPipelineEnvironment.md create mode 100644 documentation/docs/steps/commonPipelineEnvironment/getConfigProperties.md create mode 100644 documentation/docs/steps/commonPipelineEnvironment/getConfigProperty.md create mode 100644 documentation/docs/steps/commonPipelineEnvironment/getMtarFileName.md create mode 100644 documentation/docs/steps/commonPipelineEnvironment/setConfigProperties.md create mode 100644 documentation/docs/steps/commonPipelineEnvironment/setConfigProperty.md create mode 100644 documentation/docs/steps/commonPipelineEnvironment/setMtarFileName.md create mode 100644 documentation/docs/steps/handlePipelineStepErrors.md create mode 100644 documentation/docs/steps/mtaBuild.md create mode 100644 documentation/docs/steps/neoDeploy.md create mode 100644 documentation/docs/steps/setupCommonPipelineEnvironment.md create mode 100644 documentation/docs/steps/toolValidate.md create mode 100644 documentation/mkdocs.yml create mode 100644 pom.xml create mode 100644 src/com/sap/piper/FileUtils.groovy create mode 100644 src/com/sap/piper/Utils.groovy create mode 100644 src/com/sap/piper/Version.groovy create mode 100644 template/step.groovy create mode 100644 template/step.md create mode 100644 test/groovy/FileUtilsTest.groovy create mode 100644 test/groovy/MTABuildTest.groovy create mode 100644 test/groovy/NeoDeploymentTest.groovy create mode 100644 test/groovy/ProjectSource.groovy create mode 100644 test/groovy/ToolValidateTest.groovy create mode 100644 test/groovy/VersionTest.groovy create mode 100644 test/java/AbstractJenkinsTest.java create mode 100644 test/java/AcmeTest.java create mode 100644 test/java/_TemplateTest.java create mode 100644 vars/commonPipelineEnvironment.groovy create mode 100644 vars/handlePipelineStepErrors.groovy create mode 100644 vars/mtaBuild.groovy create mode 100644 vars/neoDeploy.groovy create mode 100644 vars/setupCommonPipelineEnvironment.groovy create mode 100644 vars/toolValidate.groovy diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..e26065a81 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +# EditorConfig is awesome: http://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +charset = utf-8 +end_of_line = lf +indent_style = space +indent_size = 4 +insert_final_newline = true +trim_trailing_whitespace = true diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..b53694dbf --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +.idea/ +.settings +logs +reports +*.class +*.iml +.classpath +.project +*~ + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +target/ +targets/ +documentation/docs-gen diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..f51349c9b --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,151 @@ +# Guidance on how to contribute + +All contributions to this project will be released SAP internally AS IS WITHOUT WARRANTY OF ANY KIND. + +By submitting a pull request or filing a bug, issue, or feature request, you are agreeing to comply with the waiver. + +There are two primary ways to help: +* Using the issue tracker, and +* Changing the code-base. + +## Using the issue tracker + +Use the issue tracker to suggest feature requests, report bugs, and ask questions. This is also a great way to connect with the developers of the project as well as others who are interested in this solution. + +Use the issue tracker to find ways to contribute. Find a bug or a feature, mention in the issue that you will take on that effort, then follow the Changing the code-base guidance below. + +## Changing the code-base + +Generally speaking, you should fork this repository, make changes in your own fork, and then submit a pull-request. All new code should have thoroughly tested to validate implemented features and the presence or lack of defects and it should come with an adequate documentation. + +### Tests +All pipeline library coding MUST come with an automated test. as well as adequate documentation. + +### Documentation +The contract of functionality exposed by a library functionality needs to be documented, so it can be properly used. +Implementation of a functionality and its documentation shall happen within the same commit(s). + +### Code Style +The code should follow any stylistic and architectural guidelines prescribed by the project. In the absence of guidelines, mimic the styles and patterns in the existing code-base. + +Variables, methods, types and so on shall have meaningful self describing names. Doing so makes understanding code easier and requires less commenting. It helps people who did not write the code to understand it better. + +Code shall contain comments to explain the intention of the code when it is unclear what the intention of the author was. In such cases, comments should describe the "why" and not the "what" (that is in the code already). + +#### EditorConfig + +To ensure a common file format, there is a `.editorConfig` file [in place](.editorconfig). To respect this file, [check](http://editorconfig.org/#download) if your editor does support it natively or you need to download a plugin. + +### Commit Message Style +Write [meaningful commit messages](http://who-t.blogspot.de/2009/12/on-commit-messages.html) and [adhere to standard formatting](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). + +Good commit messages speed up the review process and help to keep this project maintainable in the long term. + +## Code Style +The intention of this section is to describe the code style for this project. As reference document, the [Groovy's style guide](http://groovy-lang.org/style-guide.html) was taken. For further reading about Groovy's syntax and examples, please refer to this guide. + +This project is intended to run in Jenkins [[2]](https://jenkins.io/doc/book/getting-started/) as part of a Jenkins Pipeline [[3]](https://jenkins.io/doc/book/pipeline/). It is composed by Jenkins Pipeline's syntax, Groovy's syntax and Java's syntax. + +Some Groovy's syntax is not yet supported by Jenkins. It is also the intention of this section to remark which Groovy's syntax is not yet supported by Jenkins. + +As Groovy supports 99% of Java’s syntax [[1]](http://groovy-lang.org/style-guide.html), many Java developers tend to write Groovy code using Java's syntax. Such a developer should also consider the following code style for this project. + +### Omit semicolons + +### Use the return keyword +In Groovy it is optional to use the _return_ keyword. Use explicitly the _return_ keyword for better readability. + +### Use def +When using _def_ in Groovy, the type is Object. Using _def_ simplifies the code, for example imports are not needed, and therefore the development is faster. + +### Do not use a visibility modifier for public classes and methods +By default, classes and methods are public, the use of the public modifier is not needed. + +### Do not omit parentheses for Groovy methods +In Groovy is possible to omit parentheses for top-level expressions, but [Jenkins Pipeline's syntax](https://jenkins.io/doc/book/pipeline/syntax/) use a block, specifically `pipeline { }` as top-level expression [[4]](https://jenkins.io/doc/book/pipeline/syntax/). Do not omit parenthesis for Groovy methods because Jenkins will interpret the method as a Pipeline Step. Conversely, do omit parenthesis for Jenkins Pipeline's Steps. + +### Omit the .class suffix +In Groovy, the .class suffix is not needed. Omit the .class suffix for simplicity and better readability. + +e.g. `new ExpectedException().expect(AbortException.class)` + +--> `new ExpectedException().expect(AbortException)` + +### Omit getters and setters +When declaring a field without modifier inside a Groovy bean, the Groovy compiler generates a private field and a getter and setter. + +### Do not initialize beans with named parameters +Do not initialize beans with named parameters, because it is not supported by Jenkins: + +e.g. `Version javaVersion = new Version( major: 1, minor: 8)` + +Initialize beans using Java syntax: + +e.g. `Version javaVersion = new Version(1, 8)` + +Use named parameters for Jenkins Pipeline Steps: + +e.g. `sh returnStdout: true, script: command` + +### Do not use _with()_ operator +The _with_ operator is not yet supported by Jenkins, and it must not be used or encapsulated in a @NonCPS method. + +### Use _==_ operator +Use Groovy’s `==` instead of Java `equals()` to avoid NullPointerExceptions. To compare the references of objects, instead of `==`, you should use `a.is(b)` [[1]](http://groovy-lang.org/style-guide.html). + +### Use GStrings +In Groovy, single quotes create Java Strings, and double quotes can create Java Strings or GStrings, depending if there is or not interpolation of variables [[1]](http://groovy-lang.org/style-guide.html). Using GStrings variable and string concatenation is more simple. + +#### Do not use curly braces {} for variables or variable.property +For variables, or variable.property, drop the curly braces: + +e.g. `echo "[INFO] ${name} version ${version.version} is installed."` + +--> `echo "[INFO] $name version $version.version is installed."` + +#### Use 'single quotes' for Strings and constants. +#### Use "double quotes" for GStrings. +#### Use '''triple single quotes''' for multiline Strings. +#### Use """triple double quotes""" for multiline GStrings. +#### Use /slash/ for regular expresions. +This notation avoids to double escape backslashes, making easier working with regex. + +### Use native syntax for data structures +Use the native syntax for data structures provided by Groovy like lists, maps, regex, or ranges of values. + +### Use aditional Groovy methods +Use the additional methods provided by Groovy to manipulate String, Files, Streams, Collections, and other classes. +For a complete description of all available methods, please read the GDK API [[5]](http://groovy-lang.org/groovy-dev-kit.html). + +### Use Groovy's switch +Groovy’s switch accepts any kind of type, thereby is more powerful. In this case, the use of _def_ instead of a type is necessary. + +### Use alias for import +In Groovy, it is possible to assign an alias to imported packages. Use alias for imported packages to avoid the use of fully-qualified names and increase readability. + +### Use Groovy syntax to check objects +In Groovy a null, void, equal to zero, or empty object evaluates to false, and if not, evaluates to true. Instead of writing null and size checks e.g. `if (name != null && name.length > 0) {}`, use just the object `if (name) {}`. + +### Use _?._ operator +Use the safe dereference operator _?._, to simplify the code for accessing objects and object members safely. Using this operator, the Groovy compiler checks null objects and null object members, and returns _null_ if the object or the object member is null and never throws a NullPointerException. + +### Use _?:_ operator +Use Elvis operator _?:_ to simplify default value validations. + +### Use _any_ keyword +If the type of the exception thrown inside a try block is not important, catch any exception using the _any_ keyword. + +### Use _assert_ +To check parameters, return values, and more, use the assert statement. + +## Reference + +[1] Groovy's syntax: [http://groovy-lang.org/style-guide.html](http://groovy-lang.org/style-guide.html) + +[2] Jenkins: [https://jenkins.io/doc/book/getting-started/](https://jenkins.io/doc/book/getting-started/) + +[3] Jenkins Pipeline: [https://jenkins.io/doc/book/pipeline/](https://jenkins.io/doc/book/pipeline/) + +[4] Jenkins Pipeline's syntax: [https://jenkins.io/doc/book/pipeline/syntax/](https://jenkins.io/doc/book/pipeline/syntax/) + +[5] GDK: Groovy Development Kit: [http://groovy-lang.org/groovy-dev-kit.html](http://groovy-lang.org/groovy-dev-kit.html) diff --git a/README.md b/README.md new file mode 100644 index 000000000..fc3df5a24 --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +# Project "Piper" Overview + +An efficient software development process is vital for success in building business applications on SAP Cloud Platform or SAP on-premise platforms. +SAP addresses this need for efficiency with project "Piper". The goal of project "Piper" is to substantially ease setting up continuous deployment processes for the most important SAP technologies by means of Jenkins pipelines. + +Project "Piper" consists of two parts: + + * [A shared library][piper-library] containing steps and utilities that are required by Jenkins pipelines. + * A set of [Jenkins pipelines][piper-pipelines] using the piper library to implement best practice processes. + +# Please follow [this link to our documentation][piper-library-pages] + +[piper-library]: https://github.com/SAP/jenkins-library +[piper-pipelines]: https://github.com/SAP/jenkins-pipelines +[piper-library-pages]: https://sap.github.io/jenkins-library diff --git a/documentation/docs/css/extra.css b/documentation/docs/css/extra.css new file mode 100644 index 000000000..05406242d --- /dev/null +++ b/documentation/docs/css/extra.css @@ -0,0 +1,7 @@ +.md-typeset a { + color: #448aff !important; +} + +.md-typeset a:not(.headerlink):hover { + text-decoration: underline; +} diff --git a/documentation/docs/images/favicon.ico b/documentation/docs/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..16d8843a0539f928d862a8105c739e8fe360df4c GIT binary patch literal 164038 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 JPTVNye*rmqY104z literal 0 HcmV?d00001 diff --git a/documentation/docs/images/neo_credentials.png b/documentation/docs/images/neo_credentials.png new file mode 100644 index 0000000000000000000000000000000000000000..420115c6dc25d073e89edb5d5f5283415c6fc7d1 GIT binary patch literal 123893 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∈(B>6g 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 Kg7bq zk}{w6Rkvg*vCpCYZe*WT{rYMX_MXhrq;^53xBSXZhspU^8i>5!ojg7E=8XXQwBklD z1(FoWMhBrfs^ql<#ZC?mjuZ0ozzV!Y?#l7qFX>z_S<)R-IiGqdX6++iG87QUMi!?Q8Dse<)dC;*1Cl65pl`P4cB^jbB?YJcWMMm$h; zKA9Wf-y5GHrd$l300OSi$&W?=wm+OqD9Kd;p`l}eizHw^Sp!kKh@#f%_})P-e-hO- zFa=?6MnnnV_ckwr*kq#){~4R`A09jSizV2r{tHKhME=?ZHV!k$N~me=DI9S^i&jV zoBMZcH&0_5X$c_tdwGL^-g=`S$0FD_tdq+)Ks-V^B=iH~MKrW{#OD zY-PpMU?8z}Zf-6o?-22M@B1zFny~L*ACQS9>FXgGb~h6wvod55qobon=H_T2WPIdM zU_EU<@5&LXF*4#jDkrCKL0{G&KkZwVJ*J!2LIG2^X76}sC-eO1v)8}nu?2)%jG0~8 zUZh`*y+hT*=>Y&p;v9f0E&*{~DeK)>e=trEKg@fv?6J}V-x9WYnh;~Hn5d4+hfKAI`3Lyb{g6~ zh-z9N7FF9HHL61lK<|a%+)*f0A;Ye~?YXY6A4PXt%d=x)0Mt|7MPB=M7MuT)wS_vW$)AC`>O`rQHYTcslO*P%L|2bX`#z&e2?gH?VV=Hwi9(53n-K0aoD*Sk3+eL{ zHiNdpug5~hoiqf_;=k;q+#A)5mA;?aY~kS@D`{NZ`XDm3nfJofpeAZbO03}anilNa zS6_^;da=sl$EyTgL#IHB68_T8NqhFG(*@eYtSy93wI4ScpDiW<7}gfkipD1MYx+;Y zyaK}F7k;O1fUXN0s15+FOJ|j4zaGia2op@eDmh4tCG8pG+;<`mU~RPv3CRkd1VDmH z^DXKyfJlCJqpS7vOCeX2QkmziQF5iagHelL=T7_FqD`-TF%dFMpru5Sp|=o^B+bh{ zbQwCqt!o<%2hGP>NVFG1R-yu`t;Z@L<>h7dT|GnV<~DONPI(9U&PqFrGzXixO(C>` z9h{AWqL!pE{hvKCcRIbiM~gijRXi8-YmO0EOIGs&5UYwNv_K{=`w^p^zpNx?R{YTx z0TxmYv#yw}%4-FS2YVCtM@Q|>e(%>@LfwSUfkaCQTvvDeoI!=BTs;2DRA*re zbx924i+!G>)9hnffySH1S2ozm<9e2NkI3D(@{2#?<b!?X0nviqlVp)(#@FXZt*^1 zGlNpsRpCZu5>bg`Upl+-Stf+My3Q|Sai-)OdIOI}JkgDF0%)sp`(u62q0{e?C^R

b5L3NY+5*cc}Q_|yrrDiWi_Sm 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 MuXPS}=6b;Y0^naR_y7O^ literal 0 HcmV?d00001 diff --git a/documentation/docs/images/piper_doc.png b/documentation/docs/images/piper_doc.png new file mode 100644 index 0000000000000000000000000000000000000000..a2cb4dcab8e1e73307d375086f7bf859f2e44414 GIT binary patch literal 24788 zcmeEu^;aCv6YV0w-8HxbU)Nyg=lu!q zx0eHFb9#Dbrn{@FZr!>~q?(ExItmF22n0e`ke5~mfnXYd-)tlVpe0QyyASw4c9Pd~ z1%WUIUw>henK4L#MnpG-_cDmcl+q*0xGM9$^%VkZa|Z? zm8*q|jgy;=qXP&RnTiHzM|o|Ra&+=`v9bQ>2CBq_3IeSd|FybUnZ0(UbhELy0`c5n zA_G^DU$1C5LfkyfT&zGwPA{+BQUANSjjM&78PL@Q)Y97+4>TjaHtU$VIM_H?gL+AK z!htr#|9#)x#li}7^%8vef4fOJ+S^+>xPh*rDLp_N!fQ888#g;EQ0d7u0|-P3QjnI= z^vXK=>*=Sl{fu~~no;a~s;)S`LP{3ni?1o|6aawVzCtcQmAdk=Dk9qbD8LlcS7ydoQH&++*lLB{0O{-b1-*@j&sHv$N zDMPR%y`XW2AmCHp@dKD91gqay6N*F?a`qOVOA?8yQ*I~*OA_hy|6lrlGaJ^E^N4gs z!!$KJ+=?XZd2Iz4*RY6Q0*LuNlhXgL$ihbD!3H0I<x`IE|m)y8_Cv&st~DpE*PgBf6TD2}?h+OpH))@F@%4u=H^U^?@0 ziDh?9_C+A&99q34ec0YUJMU4GA^J$?u4^=sZ}@7qb58DOlBK)y@NJldbT}bc#^!}- z?}Rda-TgYs@in1P)vvYKVkW*69r5g^*Zvf#Si%%{EGzOa-?lA7u%?A#mLYD=XGe4A z6V#qubX0s@lmTR?R(Ac#2b&^sW%jIngoImZSC3eQCCs|Ya!6EN1Eb05IZBL2$I@yx zg6{=INBueKoqs~h>=we(wr}?gxw-Y5BsM3%Jz`==GK6VhOGeyrxLDCA59R@@krYpH z5LiMy^ShZllx%hPh`Tl6uUqGtYbQ}lRGuawoWw1S$CHqOg zo_GdWN-m2_UT0^jQYUi_XL0jib&yUtJ?XU~B zllj$E|JW^NGgK_U`3*o=Dt2~B{%lYFR=f6~_7ZrLE`UuHl19O-1Nn971tmu^%D17-YwLMatl`uwG|B`G;hYJ4O|;eMz5 zqkpy5!A_tvh@*Ovh5t{7n|D`H!CS%~fm@V`SBvTGgioEa#KHlVYes2cC*t79|GKk7 zz+b&$4qXFVPP19=VNw2^H80R2lYUV1G(P3`lrs_Lup3}zP#zP$gz9Foe{quKH zBo!ug!R;X%Degj3^3^9qR2M1P^M$?Yo~%??EWi-LDuVeWMdT=FZSnF48(F?!^^1Lp zh(Ma@_?R&zGLA^uPKzs=Jx|qe6z+hU4m=Iv?(eV!wImW)EczYf;?|yML#zmx zCj$Qo7m~w-;)G4*v6jExeBdpK2$~@l2I>$jh^{giE@g{Oc8=H#%mYa_S0ADei6z)Tqz?VSz`Sl6v%TtIM19>Q zXwpYl!PoF5lFDXUSv@|KdMcrQmok5XEm;{o^m;c|H{+HX>r@H}KNs$Cn_IcBwJ_d1 zB^~~b>Z^!)uMP;>Flx>__%h+ZH=<=D=p6QEU@!T@BYL|5E%^ZtjzQ9jsTdYj2nUop zI-OrVW=y0pT)^O-{OdL{3&TeI;4HsoD#iYF*LPlb`Vg#c;9dxz0@zbv*>qAD%0yxu zb`>#mHD*?}-5qyL(f(yaUuW3t`w#(_!Z$ozU$1VdW3zS!ox%+})#$>9X=)qEh^zYF zz)d#4oSx>1D3dpZ@5`!epME?kJ-%p9>LQhWv-0!5dxQ_!aW5yeG0SdB^DXIl3*Ge9 zFL_MQ4YSI!sTI`U>8CC@p7K$wb{6-%L8BVHc!!7L=HVe(q%KjVEmbim3H(sD*0ofr zF@|(?iAYmp=jYp%Bqzx<22EL+ueR|UUGU5r{TcYSp*ZIpr>^&%XDYguz2UI>tp_X> z{XcKeYETq0mEYH_teBJ(g2u+i+@>b{70Y7jdxW#>o8;OoU(#122(@(>#tQ(&KAK0c}t zBLZ7%SYAa%*56-*goNbR@81z|aTvp*<0~s~PfkwG&d!2TQwc3Oi7j%52%>v9;ey8U z;wc-BD4)AM$}9I#=A{|Ttq+VHzUW0TF8Xx3f3j~meUIW#Bxb=k4%|9SURhb%-JR!? zt!-lB)YUknh9(pK!NGx=j!yWOFR;RQTS;eESD`gE>^Qi%dgEp)ovpwlY?K}oHQXD= z51;&pH@8+G7&v-yzB#17j$J|nj0+Oa%@&LyAy_AcMMZh-?Ig*`$sa#`+7MJBR8dhu zLP8Q37Y7xpzguudgG@CLJG%Q~l46XE(}cV2vjNv&&;U zPf0@q=k4uHpf?H6h^u^87( z-Eaib%&5MZ@5+8K4LX$uy;zCiQEjP?jg2v~u??qlS?A7OY{(LU#4G0V%ga%;w6t{F z-QGz`NhKzjwso+d@BBamIh>loZ2)mPLS-51LUJ;OUnb)5^}BR*A@ce+L$;BFxeDj& zBRx$`&9m}^CnF;x^7{JvTE9CNS~@ys@)CniCP>W>G3nf;AhsIYCXy_s`mSq^ROUb# zB{`$ih3uoh9GnpZ3b_5rgeHF2)|205Y;4|flb|m+LyL=x5q2lC2QqkU6H-!!-Lrbu zw7_rzV+;BCSp;HUU9)6>&G+SzRhqA-6`q+>Jgj7VnI(I3>xa5|VRNMV*Y}WYmRiQ`PH}dip_5qK6RLwD$JZCo2mNw2?O)0rn7Lh z*u-jMZ$ET*xl2Xh%C{erI>aKV7!^q+(iDF8=U{0di|x65Y2g7t4@!|Wby;CpOSA;h ziP_n)*VolgaQ2D%Rk98aZ1dH}0esZO=k;kYy{)1RYm`TS-WIoYArLYL>`-D00Z_~- zFaKewH0ePUSanIenJ{$Hgv?A^EiU|@MXjwwlOi`{cqnfwa>g@dW&#OGvx5YfA?ub? zghneudjH1r&qkmyPE9IzAw#_X~RJqHI(|YeF!+q78l+RE55_^OX`35({HG zTQ6EVI#NaIRIIGAO}yNltdQQ=&_3cJ6R9e#r|qjh^Eif8qGq#g(=+&`HmtH*t}x~L z7a!(aEWXGD*W+}=u^wxw2z|y1etQ+1>Pq=&IDoZAf)TjDaoZ6}qsRij6$bFCvDmXA z;3*CsD5-4{xv66G+g#`r6%||K`cSW~u3G)>IBnm=@{yw7SnganStgSoUHH_FU|IUl zUiM^A8-1=HW@fCMlyn}T`^LMIYc$tyIm>o*Oop{3O5`sRPBm-G4TN-YoVm;PSeZ=7 z`a@PW5G)DWEQZK^vB>cUEDa^?{s6n{gTDR`ceIuBfByz+%?60rKX!Hl?q^AIm#X3j ztGzMY20HX-&+#-y`9EO-f44%v1`6#-N~} z5G_qkF+~xBLcHVG1z`{UjHK3gr{fQaLUhSPB|ifruK3H6#;jjOpi^xq;o?&N+$X!? z4>n*h`htu~{+biD#r3ymq)>PI`;e!|{4%$ZgqD?-j+zTeTpC$hGtf*@dK*9sBiYUW z-~{@)sYK=9+f{Em6*o7*n;7{aTjbOa6#w3Bi<3e+9U2_`h36N>!_93v5O!j1of+jh zq+BgOG*CgmcC2BWpyB@Qke{HS5sc_NDZO!Gl_#$pyD5l4)%h(YC9Jbk*hgjfOMX5z zEj@k4u^-@U4~vw}SN3E1^=oUEShFJt7PsZj=EvrA@2TGd06=$WXb1?-h9kAefL{c{ z2}Fp3Ju2NWF=~+=ZA5N2|HF*p%&#k(W4pnH)MnEk<`lGrzsx^Lq9vxK$+r;d%>%J_ zbX2|}YkVVG&+?JP&xszkB)aDdf!n@g4D%er*~C7&E}eJAA!CSc=i{Sad)Me^Aci)$ zl{fF1H+x;$9f{z6{;}g%U2vwYBu6efrZ^bPJR+Gm;h=;dc}q=CKfFU~=TcNq0B2=o z)g>A)L(l-EN;e{WNUO#Hp?piKdc3T0gaJ{i4LCL~NK}6rSy;9Nzr1H=WeqiCJDn3? zsZOIS9yT+9kWHinjJV@fB$;?(oLYCj2L9>-EOT&vL4nPC;t@?It(uw%mhvjGeVBpxzqS4il6#+;Nj%XR}Vd_by0;@%(N{Fa=2b+DK|gx3HB=d}T@#8UgBVNYd^ z@{IFUW#SYW;eK~KNq&3^iukZFglY?{CRDf4gV%+82vXX_ zAEa}hS<8v^=LZ*L7rp7;aX>Xvd#-Zqde?P4Gj&r zCjFo8Xcv3{@}MUl(E~?En1rgfUG6{Zfa# zx$6|gvQNV$yGb8Qu*~NU4iDSn#N9ZyPs8WTuMe9r6HHRacI0qyXIqjtGnJM;vdft_ zm8R)6UtfC^_-5B>LsR4?Mk4dsf8X;@D*@T$+RbBpTbxA1A{{NQc#*m@dGOxU?~lvv z7TUm2%;CEy7h%*;35^Ae&yeS(**63cs32BH>RBwoyickiv$Aw*E#nI zkgZg7b>&*Xj(~}I@-^>F%VvB;qeD+keC^_mjfNFX;_w$f1%E($v3~mZWHLBq*`ODY1Gd zCNKaO18l_J*d~qa>}<6%P2i`Ir5B`MHDB7pJRGIx(+>M0K#JZ}oKzN1$s*`>g-%;^ zB5mge3m64h&&7ok_!lE63*2mRk+{0L+R54Zb3+5yE9TzYLyD9(cS8Ui8UU9WlNB3V zS_+Da-c(gpeYCePihLJXpvi>(c3c-M1Vmf9SU2A({YJOh&0X75SMuNlWAIjLfjDJQ zcsQc4u<+W+35KVqr?iYrI%}{l%gK3HNC-SPFK>QX88Q$I_l_Emqd#AJ4BQ-B6{Z1f z)aK75=5&6Zbv5lpiB6&$9Am}hpMcRTPftxv9Uop_U!R?ye{N~v6BZG9-@d^aetUb% z_R>>bjR6=V?_Fj5C3C~-g_xuPLladCul`5p+k+*;5z0Z!7UO*+cvzr!@9HXrv9YmW zOMgoLxy!0PgHNdUmc%PjsOa$TA`0$`CD?uua3@Nx+qL4NBx?DzO@Yq9@S+u|f6 zrT}aR%uhsaF6HgRgA`M;3;CF7i*b_zEzY;pRD&lKdSGv@UW$E@9k+_7gz+=F?;jY$ z%>G38$v~+zxGDX~4~-*j|@|iWm-Hl(WG!uTG|yU%68= zDYrBw2aE&hb^`?k=CuZOuVJ&6&HKs64UZtds}w1_$VyF1M@q{8^}PWpw<2BRF?o|XKP;@@xfc{c>;qv)R!q#vnS3Blh>MH6y|ozN73N#g zIgHtG8`V|(~C||$geEat8u?-h_6)99QcqC){2aDeKh=n*-nedD!rKOT#y3OQoH!*^c z`yN>5whO*6oPEM0F#Jq^j%?ZuQG{c(r@HofQBqaaYxzpm3z`K}qt`&Gps;@>fQy6UbakL*>`;4j za1ezl%5fAOtXB&{DR{C&?A{AAF^Ab z8a&zQedgoDmcOBVXpBukfeB0p04#v%ND}}z937*xe}J@cl3voP%@3}$q-Fw$o$--# zbZ_(36+fdMd471iBZl77ZD986H~t6Iv&B0+T^~$-IbWU1_Dg$dxgjU=P^^L?I{N&b zP5;t>7ym}1&O!IAx5y$QYnQ(*kaXMe>S{8(;o>!!WPk+4@jB?=)z#2<5nnWtr9%Ra z#B*Ezca|XKlf>dJQ%{^%&J#@^a(4UI=7D4I1p@&$U9O}2)$6`)n-A)AICf`OQr960 zj8R{8-KgL|?ou@6D?X%z#V>H|n%Y#)V+`*FRTULchGU4~`1ts^7%ao&X*s>@YNCl# z4`aFYd5mMY0x(A}iiHuT_jpH7J!l6DN!+2WYkFu!V0N|~F&uL=Z#x!V1o(~qW6ylQ zrE#^ndB6twNzh5U#e%XBcQ!(&U1)_ne(z}v4iB4ejV1ytf)!=1w}7A^iE#765KH*x zPy-=T0Ou#aC}C`!@^~<=YJy;o%Xx+bpK98ev3dVh>MMi>IbIjSBWY`*mOFg?a#Yp~}^p9EyKu zL-Ieqb9w7Sq`(~G`|sjnoZX@~2nLOgD;o$t(b4NBJHA@b>V@xzKi44|3)*2_#Mru> zcQAz|o=*^*9J1K-@qu&yiHfyP9;Ttlllx4WHBuGZBjzKI?aGXJHbBsT2PORLN7)kQ zAlzOu`JBSQbpy@Yp0zP-zY&#=BetD&HfXl1YyGlwbYwRh_KTjdp-_`pk+n3*&DI*O zyQ`DD=Is+;HOyG9Ix)lklj!|}p(?-q{RHZNV7O$k1D;TQCdL4iZgfr~Wdp4-nv={P zij+xEPLEQ$SqY!N1W{5Eiu0PSW*e`{3`#*4|{cr*}GTB(Zt~4Iq>vl9H zx6UgWxB9^Z$&iun4Hk0A)MOUns zLD=B<#X1Yb$Hzw^Wh){~Ow5AeOhafC>0Zj$y2f7{fvLu?QzI#N?~NhK zj~jX4?1F)Ftzu)L(lW_{Y^MH66VHX>dpKaht#RgwnmjzM7r!?XR$OcPM$kyONB5X% zTwPpTB(oBiJkvFyc>5@t+(taxYOt&Tnh#%yV;``OUgmfRUH5X@CVF(Wp*Rw3#(U{_ z;s{!Cj%v~Q{e4@VD~qmc{ZVPIgO zF&utRO+8miS7w4-*>CU7HfFjo-UaK=L>@L-JGb95ld(Udy|N+p*d1D0N}>Q5jFn$( zByPLhl}b+n0KD<9a!p3vj)}D|^vQ}~%TX);Q0qZn$OR$c7Jc^)IWI2{t>m6LQ664ZRka|Vt17Jt zFU^Ih4rZ<@6j*6(HdZjUH!5M?G0uB_&QR^D;ild1a?1trB-{ZH*T=G|!+Yoy6ch#X zsedii!M1AJ8L!{<%W9Rpr2%Z@u0p$D`$!K+xiXp?a2E((P$StpO@H0?1tXHqUA6JS z!on&GP7IpM_SDMXknBfen5o&^_k4Ic_5{*Il=6F@Es+kQ3!Z=j7>V+;6+?ey zf$cc!75)2dly3F>1VS|p7PHHyz#>U0>FsJTR6Y5}4BDrE=?Muzy}jbHobZT+2E>pBkz(vhp)wGdK9g!~_`>{;FLisdumRnl9U?vKKrillzP)6ipiwe(ym=M&6&( zA~ux-A8O7_P)PG77bhJe4JzWvM&*6DD3GY)VO)Ji`D(12=V_QD>Tl}k=$JC;=H_-Z zHyEF(oCcD_G>vrdvtd+Z$#ff5=6fUi zOLK)x-R@qx)EX!5rIPs7{1>~Hc>sDi1{LHQ&S&J!n>T$E6I;W~AO}0fO0~3-nXoAZ zrx?P3|EmQ!f79H2_ z+*+sA*vM3a&`+ZGMA`WGz?6Ag8MN$^(gJ1|LfPUQ0ywy0-Y{}0(0!g zTsX}P4EhT!W^o5N`5%3^l$89gS|oBA8MU45yyJcuH$1|b z;Q_Rn^10IIJ&UeQz*zz%gc4U}C#TxQoTR@$3h9Z6mUm5p#P)zbNQ3l16rD(%q|f-J3HWGKKkCetREgm z8+CYqu}@WB>wpD4f0P4;@$cMs(?+GdCSBw)XKy%!YeC#y%BnNeD3-KoSJdh z4|m!M@X;E~==I5*z|Nv|j*JGM34Lc*7uao2En>*Lcmsyx{0DSq?6IfPki3&aaPKWp z`lPI(e&_<3O^xWmFfLB&l zjH1$ks!SLfalaQ85WOIxZ2nM^{+V}Jlgjep${CNlwhiBNg1PAKUqF#o=N=dcYQ?V5 zfb%6|*vttV2>*<{ z=^l4}c6&I;-dsKEz*&}d*A|w}GiaX||5yaje@1YrxvlHe04~V9YCvju{M(;bla|bF zC=C#^09TFzWKL;yM;K_RX;Dt6brCU^yNEfz<3=-kl>Ivs{WgfouRB8zx+ui|E<^1( z-r96HVZWmY0PUx+io`j)yFXpF>6w~R-UBX69~kB`%-||?2>Q3qw!$uwp9C{DB3I^* z@a8E=wWqR{(t6HIr6$j&-yKjgOAcC4?F{m+V4x8d&>xu!Nn?XNc-T4G43~11U_Wj^ z^kGdIs|bF|#qX2h;N!mmAnL!v14>rQ8tehscQV&*vbrvP8A zkNjDF(497V!Ed8*1q_FP)_Z-tq$fXMe zBd*&C?^*fIg55UaRAn|ud{y?BoSH7{X3EbeaCJ^uWM4~97E*-UuQ487-rvls^;fOK zy!5i4?gbe02L80ay}A#V&0YX1J3x_xgXi(xpbWz`J+)b)ZZifz=%~$ojRz8F%@(}8 zs)ngTS7gedjsl8D!-u|A9yH(qSQ`RlkzgChPnND5W4uVZJ;oyU#y|$FNRAVq6%*@N zeXOJhKomu0HbGYU@yEb=g|Cm_O9T1H`Q9HH&0j3KCX?&G#O^lhr*`K)&hcwpu(D}C zezE2ijmB&y=LS=msoSa3R?mI!yZXb$Sl$!VqFTkX)YkMXzpe`<_E@V`JM(<^5RT$X zE^UDb?JPZl1F+B7l&b?*b&R(mkEuCo8ChS-Z&pgkWgYU4k3u+aP!_;GmKOu1lsBK9 zurfSdWFd=~x~+A)Zv}IX`QskKDs!zr5->r1VrV6L-M~-U~<&g?G!p%7Au3F1W zGTQO?Jzr93>CMAsV?R@LV*2(}C(YQUbMmDgB8lLrWD9CRetZtcARkT>x-Tf6>x{;( z0mjUAsZF_gb3*t&M=XFmdZ%iz>CcRst>Dl5#X&b?mCwI>4l5_XxWyPFWgAaj&y})P zboJwyn~4Idl!v;;HIs5NN#Co*UyzNl&{>B1Dje5*j`g@(7M#dY^*^dDXh$*6jW{=N z87zzXv+VrT3$p03+!Jdh?b+F0ALCmUKfJr#V`P~P3_^Dz=0X@DdEcQ0Z8SF8Ks(F+ zSWOl<{fX!HenUwYx2tpn+=2ga2EBE=ZM)`r*fqe(>wSCe@t9_1H99G2=HI+1S|e38 zcq1SL_E(@(_c>?HB4XoVeWPmMO6sdpJxsXhvNf0WMZ02MP`gEN)_#=b0p>Kv8ylBE z&@|NRv%+qqit5OkKLw4`&rjl%9IlGb`;3fhf|BvduT>sz*YCai8#Pd(U4&Te*yZv9 z-N)Y~S&uvwOW>X-H`q+Vce$E81)XE<-Pwq3nEf#lN?_|-gyqFk=i9b0s-BZ98IwpA z^gxu7z!{^;<*?aw|KNjzc}c@6fzaLW5xtILro1>wJ(wa`1)oTKwIUhY zziwjP6k(=8X)1$+=R@Rv3|u6}(duFPF-#urXiR$pQ(z zF?YO%{X+pVE(F$*l)=BU6r?Y=xT6N0@IYWj_^KzmfQ)-K&v>cw%#~_9SxEGj<0qLw zd(phx#&|S}aN9Fm_NGVi$xsiy{Yc|k$vUMQgas2fOXh9b@{JiwW+&Xps^i{k=}3Ha zjD>+~S?#6FX90xIV`y5L0K-Qg{>aDmR*B}V`4N|$!Z$mSVX@<&8n$jrEr6qnB4smk z9F9(F6DCtAJC`NTJR1uH{|j6d$0LKP362++H!M@H90F34Qx&8)^pj@`N&vlnHpk~Y zc>x3H@_fk{BEN1#>!_~ZEqPj)uOd>_yIQhnI0BpxKradN`*CTn+!1v9KT%Ixw(I=# zEKg=B;#!I5-S-(WEQ34~2|fE#&UkFjj9%$Vn`rukR8@G2z$%2r#NcY-|3=2q430TRmVytK6KroWR;TEMYnrK%&xX54;!krUnfEho{B!lnx zk^oU#PWwJt5+ECDvKasMXR%kE3Fd_S5%&4=!YoB}Qcxa;cLOLcd|0vc_3xEMSc&yT z5DO=YT-W*Zj+Bqe^VzS_WYU@~Efm|wXKf&y_3}inhCXPS+w)r3u=2L-#^&EghZ+fw zJ8WUWn|E14#lGh&s&WB++Zsg)kG6=wtBV(C0oDQ&o6;5D0t9-ZJt5>IDT;nT>$SFd zEJpJnEgB$tk=eJKKx-HB(G+)qA-as5X<4+OQRWyUyn>Rk$qY)SyB$S z6=IOfqTu~@Nc5L;Jo%N;2OI;$9d;O$6WMBg<|+?fV>&LLZN$Tyv)Bnsd6HW(WSL=q>#l)QCCWA|xA{6>uwI_0Y3sN>6_;=o>u61sM?S-tf1 zWIv8RilWd{yn2C$6%yu@tn`FUWL44_J-1j9niV?3y!OCo^&Ca%?AaCyj#tocLJ@GK z_yX{OeU>SGUu&RHbtuSz7mi?2U?Z+}1YCA16>(ywDrclV{Z(zzk39M3!c=ahbU{51 z04so^mUz*Akm5|FhZb`PEY(qH92UyaI;~4^W-z89neh7h9wJ3*_nF5DoY=xI<5SW! zzzP(voGtMJgTKmdw)mSbrLFlod#QF$fX6Q2fmHrmgLMFaGK2-#hz*iH798{_rHt3U zND5vYasq6Gvjb*!yrV}BpO@cblIq5ff_SMJNZaH$s01ESL{|gLWqRXcl%AqK4p6oy z`y;s6v+Uu1HvFxYfrI|m*w}+Lh1O0SC`MSOzKm|T7Omiz?r$Bdjk>WDdie~Xy%x@t z(%W|r)b5Af(d{>CuyXD%3FJqAQy{)XqCQnXb5O!xQR@_S6^h)!b9@taL(A1`ydU98PQin!wgg zip}%AVAb`#$rAptX>z?NJSq$Fb^cPc@apc!&I}F6-S&tm%v+K=z0=@}tLY+s<6C5< zbT`{iH4@?N=sH|JH-~pUdY9yQ|2GVg+F_Vi*6CY45#*lTK+6e@>!=)CF|@0kD2eW* zbM+0|%7A8J);Dyqset5|<>GK6uU>${uLJgQ!n9|}`Jc#BG{euu-Z^1-FFQ9DVe6Zs|AOf$eH-G&PmWIfkz1(#EiQs(q<0t6eyI(?$>>~Rd;8CinqF)ZrOvKu zYUFg)9RU-~V0`a;g`daXLFR9whpZLn56;eeH`6^;#h4l5v|nZt`V2?*uq{+CnoBxk zo&6zTcc1=xtavk`)!l%u&B6MnR^4+h)JUI__984`hwqW|%?6?fXT$2sTLu8^!r94w ztk+s7w*32Ng3*!7)k7=M3tf9fbLi5}n=Vpy#DO}Kf-xA>9!U+*RzYw>- zZ(ior1Pu(a$l}C5gjd7-b=YbtTUV8&ni0b`x0=;xHTDe)mEM{9vlzrxw0c0!CwObj zkCd$|KbYlX_2$}Y*!<+jl%T=8r@s@kU9aU-qdfQ5S|@?y_bSgUw?hK>YQ3M5)R49n z57Gr}H*>$fUbeeH4zMN0422ZY^rS7f1LoZ7={o>*B?`}!gt=~OP6c$eteMj~6CF6F z8{85}p|Yyr1;o8%Ma$ZKT_-hlR1F}#lvCO#*5?a=`XbijJ+-XB>U4s9DJTeVz$5+# zc-1s}gFg;h0x`S@o~zgG{P4gufN?^Jn^$s|q8U)cP;?fB>~Sesv>4y0j}w zFkM?v2_`(Xw&Oi$-h3U4(;x&1KBdhxg&Bxq{C@87fN5|Nf8lj7rNZXQl0yr3i(V&J zZ0-G_T1=}L6)q>+Kedt^8&3nF3<9}^J4%{YN}m1(G&IqR%|Gw}l^uW1^g}2k6EDHD(#w!K_2q@nuL}l=I-kik_aTNf zf@j)H3I%13!BY&s^K!Gl9uy{g_(SMn#}TGuoan!+EYp(l8%P^pS%S0jF=@Y^&Va@m9(%z26XI=AL(|D>h zF24c^3z`j`^@T$U&a4P>9a|M@J+>JEdJ!{*&g|etV|v)G+)~#yWU_7zzP2 z{R3sU+aLQxyHL*yG&I&Pe;2UOabk9FZEx9}ROVG+?}&s&$I}Y}=ON6W8OtQPGSz3) z&#s25vYH;id`-o;ZF3C&;to%_zK3!z^BXS&mjhc-f|&P(Uxuj&6A^*` zaefTP1pOvzAd^GW)ftdudXE@&;2wyYthj+?x@}7joFV9LYs61HzZasAADn6p+#{)A zKN}upc``mFs%dit35`ERE<}i zS^9WcoHmH$=PcpijxOhzY~rbMnubN1Hnxzby)ll8(v@T$L~46R{}1ffmC@9p?}~Ch zHYGSB-(pvH+l3K4U$ZIr%2C+V;O(wQ3MqJiES+ z?|qPe3N@JwW6e*4;rpH^A}B~u5DWn%X9rhTWS>JfXA(%Pe_wM0oIrPHLRiMUd03Kj zP5wL8Q{&j?Mjiu|xl=EXr001t;GB!{>12VP588Oyz0oOAd^(q|ym`hNG(2C$3W~V*iOyQd}c|7)-rJ;bm?IyOHnSBHH%qB!PgzSSdE?#5tZjRsLa4J=Zm+ z#+LC2zTLV~FA3P%l6LBaE6%{%QTA4ep+>Tp*jTUuqRIm@+?!!iCnR*McZuu5kmcBK zaQD7XdL+?I5I+CzOWK|Il>V`mSU}G=01$sM660r=LRJY8?yHkM3V;I5Gu5PT4p2ap zG_cJ1M5RlU{agymE(U~g8{x};eMV$tqrj|>HUv2515JO>x-6DU^yaHMVH1)3adBJY z%y6PvAfQ?ydkTX0e#kHmaIJCuz780ox*WXN56z?jn2!)DE=%mvrm|1-Mo>`i%)5k8 z+LYI{4p0hKdM+PEz2sxQ-+=`M`#iMi>BiUQy4zv{qXD)>Byb!ABpd4V>gCp4#FDNHHV{ zm&M$8;<|M#&Mv{AgpwlDmrysu>c`kVx0I^BAoHD*y%9;A@#){jp&BwKd*nCze?}S; zNW@F@BLNH|I5ODvEEsZf!a{eDE>0_XTb+%ibj3%~q)A``b@0)8hDlKgc!Mjs^J@!B z1UOq1X4P`syHX`a6&vOy7um42ZdQt7 zcYT?FYtr{bV(maH3&MeDjNg#iOxG0&oO4?onD6`97k~1;+#pKe+gYj z&YVJe+Hn)jpR1T3gp3IqGFMhF$iH_y@jP1eQfGD^TR83pMfy_=UMv|8>}zR%nCRy#RBh6l6kpWr7JE0?B6{#4KL8C(zQU$V{52a&QB^ABkA zc@z&r%9J=}y-SW%CqMc0UhIm0yOQ@B76Mo}Ncb4tu=0@@kP6GXD^ZP6sE(GSQ?XD@c0ZeTWXek&b(sns%tm*sL)YgfdSEuul6M$-~uXmW|V_^z>Nv0 z6vu=7g%K>$UbumpQdkI)fXbQ%C?~^j7#%!*9xx24=+L){lHbd{e8OltSxRVL^ZBbc zs=o4B`OhU+>TD}3(X+Hz=5w3v{_Ltv|H@M4`NRw`PO}<2xj&JcF##BWo+|Ax9!=uY z-DG6h>4wiSv0;r!IG|d1<=2dA4S*G$0-)&qgEGKhM#@LMm!l7Ob7osJk;#$@z>}B0 zzzJCi)GF`(KcKv9`P~P7)+fDBO(ce8qQ#zufjP*$M$m6QkYU)MgmrUzCnxb2qZ;a~ z)EwdmwCY7^aK~I#hgo4sPcTq7`NnN1`+B^AXD8QK54rYCX?3oT^gp%=Oa`DRno)nO z{6QSD0W(mzumAHuw>N-h#%ywIPJ1;t2KgQ`;!(P!t7yK+rgPxvKE3KItb)I9k_o92 zME4q`!UEq^{9aiig!$z3mA~V?pfE)RgQ<<2;U3Y7$?*pa`SQl&8qFjRipfPViLJSbd zh#)%gm(Qo2vA-9tJVn-oGT9)1_n*ZSse*vNLIC7IQU=zzf^)~9#z2*I4=h1I?%Thj z0?&{r1c>IaUi4T03y5>% z_`zURbZI@B2C*%IzQHU3fsO@707-8h?%U1<3=oJS{Pphwgdw6FHeAIapA$hEhGOhJfCFiXLz}CF z>>ytCQ4q5(w|&J{lqSoHFe%OVyC-d> zCP-kp-I!dx;SD)zAgKd#fg^Q2 z6MpN;w>ZG$=PL`vWGXnt zkocwxs|x3^st+VuPeaODM)v=_MF5mxw)%wGVQA!l$4M%u10j&iXuXTSav*%=g;oT9 zu3m5Z?W}Lrcy2=4o0gKPqVoav7D!`$03mGSV6E)ZUq%sSqWk5u83QiTnt&@k>_VmF z#%>PW%UwJ%jy@t2ghfeJ2RM%n3n1FkPh)aguA+)0u4luM_=a*cAW7jc8qD^Gb}e2L zi+AXO+>Ffs;?CVrOsOKbr#xlK%jZ`Y4fl2sPVX+UYW;{eu8&|u`MMqRnhMN^^WPkn zSRB@%=FZpF<}rd5#A-eSeSg)QrDt;pyI4rZoap(U#C0Eq)N$NL>G_)7=rjTT#zEsG zWb*OuEMUt_dT0dB_nHHHib)M@@gZT!l*y8y8aM$2LiF_$6EXU%6A&2IB`)l2VSQ_w zZDCjUxw;~l(7eD(aKvp{9U9``;FKeZ{+7$S-}d?`LYpzD!P?<5eoq=#Tz7WFl@TcW zw8lyJtnL26RH)k*9MR+@+_PV{iT+j&=^{@?PoJ~4cYwysyd>D2>7B^?iq*iI zLBh{gXt@+_(O}L!wyv2Ht9M|=(s6SJEYMrX{vOZwCwmSvbLW}4 zGxLiJs7)|%o_3XXTtD#hXEN8cSoil&Hc7+z?ye*Oi3i{<2NXznl)}mTfVp3eNg258 zp2a-Tjt1Tv%id;Nv8FG3Jg=wIxQs`5+1HjyI=NEgN?MX_4S``hY0hQMXydD;z43~8mSLH=_rQS0U7eW$3*0lH%jx5;Fa?$% z)uU#^z8f>36Az+ml%>&MGb49C0DB?u^d-nu?t|C~upjn+E6f4(NRmycAd2{!YgC8y zYc%eM<%aqutQd+qdg(n2@gQkz$boPo&`*3q4py`4D!6%eHF+I$;*Hzwez*OHku$4O z`4xL5pKufa54YR76+x2-;P^t$LO=jyl*0HVz$GRpGJiuVCW*vmI(6#Fh{(;wHTL+V zagHJY)4uDd(km@0(g}O4D_2L3<8ATnUO*#?)(FYlyC4t}4bTI?Y+nF12}r6+;U)fy zz)c7^kGqvv@5vQDV2CgERg^W*xKt*5QCXxRMeCOKdu~a^j1+?%6c6cZCmq^OYFWDY z7#?T}!zR@Mf=M0L(Wk_^_is-LlI4sFPVp`I8#YoYNvA0e%i#C`PMXx_T@@r_2QJ{_ zp3$#JjvS{2Ac+^dmta6K@Xe{CUx|AU5I=y9Xj~u8@+eN98mwEbOU3AvfE{dsw+OXA zAqe4(=gQXgxMy0C>7jNx&3i~6eKmi>YhTL*)J521v>U1P0S+`T^;x@rS}-8e@s5K| z8>4Xon4M`7m#yyV$oUu{UC{2&T)^=pls6cNgXxEZVk-B60C@Y>$a`LP@CxvDBVmi* z0YU{jE^;6=Q*Fb6b`N&7RflEUE)`LG<|hH92<bfgu1CXwKeqDpw%UK*bHf$CPvPyL~``mfSU?=^;QlrWgu{_OcD%SO!_NN?)%5 za~A1gP5v*3kUAUjZYQPN0Ic*saWFtI{(G)4EN2kcNc=3cE4JS|*@_k^UjfH+ZCoR# z+b}GF+ACj@OiVR?>mzZm`pQ>pkRg9g^}>INB8l9GEI zr3nfQm~$!O9~}CWzq>fR$hoL(^63HyiSy)PZfP9XmOdv>P6S+EAMKCehn1u<0ZH(? zf72~7pek$n6VDPNt8R1BTRF@AFurQHo?cQdAWWolAWFbd=V5n)RD$P=aRSIj?QlwU zW}KN)xGWPLY53>wL4Yaf9Wcjse{iL1oDiM=m`|~(N^^i(J-^34*=)9d)>lR!3<5a4 zhmp)8SS6(U-So)v=%c3C(HUv}uYdgkHnckR|1C1n#?Md|0B(m}mbkdM>f{>?F%M;= zP;kK+w~KiqfERoNlB@T__>|tDAB}IGh_^7{v@2Aa*783OqOk7F`r^Mhh~;8*8th}6 z_L+@|mR<1g&jPPl7_y>wc*xUssMNjLwF@kPW7(W+=LaA>08r(^%OD`$nyT7cg;3uq zH5v>Y0vMhq)UVE>!%w@aZ~=RMR$X42Y?Ww;`tDC8-jG2lTK2&%Pe8i&W-gFOiBlUV zCvo9sMBG_;#yI_J%>$xyqNr>nGRXC^+BYC<*gtSU$8pdBiqz z@ba1;P4ZKsu&d3j0JohPz2BS!P5fbbk_W*usEZQ5u)`|(Gkv$~@12yJW3mTA!MlsO z6E`^@VY#f&>=AFWEgR>3*)XMLu4bujUG@}%|IQOS@w{7I9b|&!JGrNVgc^LP_+`&@ zkFj@_5(KIiq6U~lgib^c&80v1k1i%VhTd83Dj4)wPFhJ|g$3W^$y@~N9S{#}w}0qi za!6>TocHc4-aDzXzL#XWTeE}ZvXv^x)G^ffEiKKSY}cXZmYLT-J|3$(F`dU_G+nGC z*eM8Qr_v4+_vpOyG_cN0_NuDrCV6K!UDEAsxFTjfDr!NZkdW5xp3)H zVz_e%yng=jZK*(omHyJX)C+XVtZ+SJP>gl2tMbChby2pUkV~Ufe`&HabSXq^bk{0E zxU3z&?klg_(dYI6yxd1_qauFS*w@w03v~NZXmTGys_`Ys$ILP}sD8TxAcmtpV}?r;A|al9+CQ=;bZ(^hq~5HIr^?fnh=^`hOC=v8h##$EaTbY0uw zw0tirw1%`OQ}?ZoMG@l+FC*YLyi*u1Xm3EN$=og;xFM!Tppx%dLU$@s)_CYU{C$lW(qnV2N54Ub215Z(6Nfs+7TFd zToBajYlx{8ca77199eaXxib=2u;&mk=E(==$O05dVMq5=7A%H(66HIxrlH*~aI^p; zt9>{dm_tI<)$**#^xERCsWkX_F?SQ$L;#XN^`MtSEbQ*~Kiz)}xIvRhEpV857z>s8 zjv&6AWpBiwLUHBqzxFhH-id?6HJ&OUAQ9yC(_j2ODq{)~?!TdsmVNVp-A3frm$q?^6%)iU+K0$b^ge{3*704LpLKSw zGLZ_0XQElB9J}@ zH2dw!xRyllZDBaoYkfVa+{ruSAFGHK!)%-TdVf3j6z0| z)I=so<+Aw3)9ti%gc~nwyO1lr=7=vOTo#QR@CzoiK;3o?wks=r{|{#RjWF687}5Av+Ex}R@(a2Ryc7b|LZDPzFi0i9*A5nV6{mwoNql|V{cl$Pg?O_ zqELMCpY;VPS+Q1F!ua#zZzY{u`wEVgwe@l1FE2qWt*FlG;6HTQf1wU=z79dVNtxjD zVnSAXCA~N(mX7gi!gUn6ZJk+z+@FTd=1Ue((21<+tWVk(s*{}v$)kY+>v|&k>kLLO zZk)v-eQ3?|fpDXj`G@&W62?6yz3g(f#I2J#!!AgYh2_ZxC^DqV*6((1DGyiBmNPn} zm^{bE%sp|CsbZd@mu>lUs#Rax2Fij8x~xH`{*uR&6rnzsM{66|i#$pkm^vOZ!psSU zt*n}if=Ay~=SnWIDhoO6ukZFe+vrk`f=RH|FX>!JiC-1e(sZ_=1LstDH~%Z))L9_1 z_`-fF*DLOt9OJB5GR!nGeYg`=&)5{=_E>6xb0evzZML9)DdCT0o%fcc_^LefY`kNB zy3U4@+>5~coK3Dd3;R=w848(S0*2u7 zi1)$*>Yhh{9-mGdwDj(J?I|DUu>bG1E7E&p0e2yv5Mb9B0OZTtxHu@_!m_%2XX#m86tg2 z;5m?AbP#YiP6YS1r%rAc25-)jFSL2jZ(c!Vw;1vSeQ~$n33Pw@_*f0bhr>b!helgx zOz>+YTu&>X!3>I0YeU4E?Y1fd_I9lZ7(*C))KMD;6D1i&=SIA@hpOxF@a&Q z+6WHEVw1Lq;i2s)Fcsqzt6!%o{cL{5q4!$>_*p^Ldlxw!?9+7NFBEUlvx@qRO>Ybr(cxnET5rUy&Od7GE^sv5 z89n$S$3$-vU2Z=`-q$K_m?m{p#h!+Qrh>DqDcoXBETV;nb6YDLS!|~$6U4so)qM;h zzcpR^)tb5X1A!}>BARC=H=uTs$Zt7<=f~y2u=9#}Mp~A{7*g;g zW^7%})m@{vzr|z@!#V5~?f59q!ta1E^GDO88}tv$e(?_s4nMail3SkkL4Fkul7q@& zUZ#u9B9nA|2?O2wzZa+JWhK*M%O6Fs#Wo{9p9<%qdB3Tfdx87k=rxC%#36_nws@0M zCj#tr%=Lwgg5e@C*4HU&q~kvkxU|3ZQVdU!G9O|E3%^eJoQY{RN|;qO6X%GM(K?_a z`juBVN{WhnCyM>|j-5DlsVFN+1o1J6us%peo&EK0(21<8@#Au0z><@@gj<;S3~Wn$ zVY2SH8QD;QeraU2xrRBQCE~tA8VUEe^@cx|WrIz)B(=2C zpKwG+7jtR2L2-7OF?3wwcly}b3y@s9Y8fe;m4 zd{S=)mdTf71aqw$hN7|$wZ)p0#QcW73|x)MrTO>&5sl&j`6|8uXHkEP=3U<0Ox2O3 zS}`b-EcAV=yvcFbag}3d7nKxp#S1(589^_K{}QRhKw%7`c$`EJCTQC^QxO`2SPiB# z+m&eUr0LfiD{~SJ$BO$ezAx*JGaJl-jK1!yDaf{4ClnVJyi6TPO3s(&pK==E+SuTsE(WD=!j~W~AbfEG3-g+() z!^!Y_dGC>E!d(*SHW6hK=1AyNMzi}CBVHBe+mb55{Gp38Ocnk~$)ck|j1E`EFl-xe=Gh9^Go-*LBNYQnMNg>~N@{O(T{vz%D0!;f+cxQ6aw=Vxk{PEj~wIz=R0J z2qSa^SP6~RRQFJN2|qr(B3~5k>R(Tc0H17b2w<|?35|rrf<^NfM&DEvuM+hA%!=(U zdM~cC!!=8;vrNVHcjLci2#+BqnZu@RK=9L%-feT==rZFdH4`o;cOG6U=7h(L&dOGP z*CM0aXL?F&d8Pr_{^Ys11f+8Qe?(%zrLRiC-k`CA3d&2>qxOS0oYtApw2Z^~QO4uF@&$A`FC!Zg}rK(1h~*ZgeJi%IwSUpDUFm(nw+;#+S%N0v+H zV4!tc3Xjzrm=I_zTFC??W3Kp~jzTj&3UQE8MM{|gC&p_!M%oixWbWY5o=oG)P>eo0 z>eW_ys>Eg+_}56i`sGVYoPWP~;mY^?6hHri9iQPIl^I2kw-XTy=E#A-20h2x@C2!F z57T|{U#biidGQBuI;0Qnk|nRfU$AHWFpq-xa!ZVUu0DQ+1jZTeDj|UEOX4{B35uaP zGn$VFz7%0qulA&ca%@T7L<)|SvOtL}!)D#NCh}SP6#JE#Mw^POPF8Z5P)Y`Zd@I-h zK24`;DboCH^`?SlEgOnEx=J%za$+Nr^R+Y{k%$q?tJWH-qf`%lUVQ6J(^8gJE~361 z63FRrYtVD19Iys&c7lSwh_{gzd3(++Q50Y^3zi4i*-?>~VTyP9#FAC@LdM3awR;*M z#uu;ruypoV&31J@-itiY-Z(v3&Y5ogjY<=rK7L>_WlXEZ0Y?5>!ebTKy7Net2(gZd z;kU+`EQxWyW<-1xGbjw?hCXYt^lgU}=y+Ks`sN>(jaQd8;U$gJCk*C3pUN4dNr!b5 z6e){p+Ha>nlJNUD_iwp@Iv z@>Q#%Gk%_HAf9CMl7q^~;I&!_G%)?D z=JIM-`xKo9*sjoJS#{S~2y|j(#{D5wHFC~RJ>QP*NE^uI%W*jbc;d$)CPPMo&|-tl zz=;^Tz3+GiBADeRr8TNX2U>qWdw-U;T~C9~sXmF;3W)JkV$qt6jR2?T!v?OBTd{`V z!gR!zye6~)24^j0G5GvzHa2%pwa_xxmO1ps_KV(q_=4mhMAhGf{iS$a3M(Xs8vNI! zvqs~D1<__{FS#K3#unb6_hA~J+5;x{;{0E$!_8Q*-%hSaLp3-`v?Mr|<9Ztr=i5#v zqd$6?Lx3w@a{!Bj(DTJE(G3043dyw8oX_)`-;HR~ib%i0*t`4>qX=%?)Fe}d-$`7C zw&>gsl@YR(gDij}Z&1t2yW41Xnjvp~o#|eSPs7s}$HeYcP1lL1_AEv1Pgx_Gv1hzS zcq|)I{)p(#e+v{1OXm*WurN(h8stV9L@(leQhJ2-aghzUGAhM}K-2780zwD(+J1f# z(qxL70!4LZa$^wvxHlxda6V_$ZEhT9+|SNmuZT?~ep3+;N#1|f9{+W zN;#~W6yQ*cprwWxn}DJ`e=vP2k9+US$Y_Dfqn2a&--8s_9DLwD=_A2|{F zy?<$W(7~!Bq1LCthvT;V!1RH-1?dyDC{N9Gdtu+$<$onUZYbWqR+uzM5Fj&`^D)0#mYy_#a9$5v%|J literal 0 HcmV?d00001 diff --git a/documentation/docs/images/piper_head_white.png b/documentation/docs/images/piper_head_white.png new file mode 100644 index 0000000000000000000000000000000000000000..4bc5aa21a2e82e6169060f4cb60108b359569ae5 GIT binary patch literal 2239 zcmX|?dpy(MAICp6wMo`ik@&>SzBFCrD_@_bA@`*=3ay)OvzBXibr+RlWrnB}A-9rT zy83pJ3{z6Hl48W>Qn_DKD&LR3kKgZ)bKZ~hJg@UQk8|FSbKYlMsZQ!kw3h$?piXhN z-v!6|`G#5y_a%#*q;OE>IPc{H0J?U*EjYgptph`(fU?s8*}VvhMCmTZL@9qG2fAQe zu)vqi1Byx;onf?803&-ApULy%2>jSVzzS7;1DG$F=XPvPIM2_=R{-2x*0=?x=--sb zV$4f%0>7gy!2IhnRd_~qer7lOh#-`~V*v*_bMtbw-{yXNW*`HW@_>q`cava@n#X$> zydb|IAKB~ioTFR4_;6#LW{;IETVs80FKThug6C5?tb5!AWMQbwb zduFVV(ht0ZfE9J8Adbc(tv--lJcuNpnKThW(gkvfx!B+u(x{0WaLw_oX-FcoY-MU( zBvd~p97-VnJa+r|W}Rd{n7TQYk=wX9wYNYXj&oTt6E)G#6}u}hclU%DwGdQ^e1H3% zMCQ&S$`i^%^&)@peW^U|97!y&yi}gXyh0M2_l8Ii+r=K!(5_)$Z<&}o4ZTZ~V=as= z9W@lrkM5{ClkaON=(|IF23;cpZ`7tl#MhYLsJ&GcKsFz)Yuhf+&p0w;p+%94j zK<_vKQ%ELuO0o8q^5D%zEzbm|x}_m=w7?r=g*;J9(|&Z8d$Z^<-}6^nRgtz+(V9_0 zuk@xr7+^e{qfyo8PT95Q+)p)(qfMoCZkJ@+oh3Fqc)#; zC40C@!-*VgIwL`RGt#X6SU9%!ScV4~olE!Ja;~Am%&Db&{!?OXnu5r$df5=o!$_y#OYVbY)XO<=0?fr}sef$jNcRyLbP!fk z%%?vnoXtsvvc_$NkZi~Hg~UF*3rI9HSUpR6j*0(CARHlE40GwrqOte+Jz)G$PE9Ny z9A!L6c_3ww-q(G2d5H;z#EMKj`Td&lEnSj~{ott2ooZ4Y!|XbpWqNTVm%h}H$327i z_KY2d=00174@u419}gYZf2&OH+{;<=f#jKl&~p4%5`H*zC4Ztq=BCwOqURi;)(de; z-zhSFJ+LM0a%UH(U*}H^Hspl{Js|B#L@-5Y`?HFp=jCV_Wz5S;5>V|zj$AA4j*I-3 z|2C*tu6eGe@`qFERHJn}2ioK94>Qg?d-?eo41OXuQp8lHDQW2G>R6cD^q ztx)+-!EBghQ{iZ13S$9lMtf7u^93wBi#5L=urCgsa{@XZS6Sv+Ir}wwXeKh+p*F^{ zjFF}Xe-dBcYuC%Nv!mHG!tu-v6&{uP#HbOK@THNY3Jb9rP3!5xWj!`_G|o^hn83&xz*~0$RPsQ@Q7p@L^(G_E1-94-`G*;V0=?M!H{9+2$59CaR-pBP27 znD{*Q%1oMN++cKBCLQ~ueW74HC?)Hj^GZay*%t9Vi{RqvLbk@Ldp$+it6$gf-r{u} zPdS1uS>!{u`eM|=BIoaKh0SLSP69Ybq8RnddcwGemWZl^-eH8+37hbnl{moJRb+6o zz4&GzH4)VT;ZX#g;!XIwN+B+J{h&nHoMdnkCEpu|?Z!IUTVf>DtOE+VE$(3;Y*Pk> z{TlUN<9KQhh*eQYtVF0P*!Wo(Q6d}_#b$T4oQD(B1mUd^U79W~H#Xs;lNUg__2#C#L!`bwBT9j~cfwth*VAxaqiNQM&TahB2^TQ$ zOqtsbl(I6rD(2u>fTx-mOe;tt%AdVyabz%!~rs<%kO0$dWj%jW%HGzWsMA$I54rIPop| hq$CW7gv+4sjGn29a)1%z;sV!cfZ{;4FSR{%@?YCv12q5u literal 0 HcmV?d00001 diff --git a/documentation/docs/images/piper_rollout.png b/documentation/docs/images/piper_rollout.png new file mode 100644 index 0000000000000000000000000000000000000000..caf6e6b9e1e0171005bf4ca8e1b5c9deacd16eff GIT binary patch literal 61328 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

S74r$fbwgJ=(6BKskhzSHr@@0f}S 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 ZrHfA6I6^c*>rlX@B&RA{C2bn=e*h+EH0=NY literal 0 HcmV?d00001 diff --git a/documentation/docs/images/setupInJenkins.png b/documentation/docs/images/setupInJenkins.png new file mode 100755 index 0000000000000000000000000000000000000000..f19ac41ca3557460b71719c504be03f1acb87704 GIT binary patch literal 22093 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 XJ$|R6%=QOBw=j6R`njxgN@xNAqs4E+ literal 0 HcmV?d00001 diff --git a/documentation/docs/index.md b/documentation/docs/index.md new file mode 100644 index 000000000..7caa5abfe --- /dev/null +++ b/documentation/docs/index.md @@ -0,0 +1,71 @@ +# Project "Piper" Overview + +An efficient software development process is vital for success in building business applications on SAP Cloud Platform or SAP on-premise platforms. +SAP addresses this need for efficiency with project "Piper". The goal of project "Piper" is to substantially ease setting up continuous deployment processes for the most important SAP technologies by means of Jenkins pipelines. + +Project "Piper" consists of two parts: + + * A [shared library][piper-library] containing steps and utilities that are required by Jenkins pipelines. + * A set of [Jenkins pipelines][piper-pipelines] using the piper library to implement best practice processes as code. + +## What you get + +The shared library contains all the necessary steps to run our best practice [Jenkins pipelines][piper-pipelines]. + +!!! note "Jenkins 2.0 Pipelines as Code" + The best practice pipelines are based on the general concepts of [Jenkins 2.0 Pipelines as Code][jenkins-doc-pipelines]. + With that you have the power of the Jenkins community at hand to optimize your pipelines. + +You can run the best practice Jenkins pipelines out of the box, take them as a starting point for project-specific adaptations or implement your own pipelines from scratch using the shared library. + +## Installation + +Prerequisites: + + * Installation of Jenkins v 2.60.3 or higher running on Linux. We tested with debian-stretch. + * Jenkins Plugins installed as described in the [Required Plugin](jenkins/requiredPlugins) section. + * A Jenkins user with administration privileges. + * The Jenkins instance has access to [github.com](https://github.com). + +To setup the shared library, you need to perform the following steps: + +1. Login to your Jenkins instance with administration privileges. +1. Open the system configuration page (*Manage Jenkins > Configure System*). +1. Scroll down to section *Global Pipeline Libraries* and add a new Library by clicking the *Add* button. + 1. set *Library Name* to `piper-library-os` + 1. set *Default Version* to the branch or tag you want to consume (e.g. `master` or `v0.1`) + 1. set *Retrieval Method* to `Modern SCM` + 1. set *Source Code Management* to `Git` + 1. set *Project Repository* to `https://github.com/SAP/jenkins-library` +1. Save changes + +![Library Setup](images/setupInJenkins.png) + +Now the library is available as `piper-library-os` and can be used in any `Jenkinsfile` by adding this line: + +``` +@Library('piper-library-os') _ +``` + +## Extensibility + +If you consider adding additional capabilities to your `Jenkinsfile`, consult the [Jenkins Pipeline Steps Reference][jenkins-doc-steps]. +There, you get an overview about steps that are natively supported by Jenkins. + +The [Jenkins shared libraries][jenkins-doc-libraries] concept helps you to extract reusable parts from your pipeline and to keep your pipeline code small and easy to maintain. + +!!! tip + If you consider adding custom library steps you can do so using a custom library according to the [Jenkins shared libraries][jenkins-doc-libraries] concept instead of adding groovy coding to the `Jenkinsfile`. + Your custom library can coexist next to the provided pipeline library. + +## Community & Support + +In the [GitHub repository of the shared library][piper-library] you can find a list of GitHub issues for known bugs or planned future improvements. +Feel free to open new issues for feature requests, bugs or general feedback. + +[piper-library]: https://github.com/SAP/jenkins-library +[piper-pipelines]: https://github.com/SAP/jenkins-pipelines +[jenkins-doc-pipelines]: https://jenkins.io/solutions/pipeline +[jenkins-doc-libraries]: https://jenkins.io/doc/book/pipeline/shared-libraries +[jenkins-doc-steps]: https://jenkins.io/doc/pipeline/steps +[jenkins-plugin-sharedlibs]: https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Shared+Groovy+Libraries+Plugin diff --git a/documentation/docs/jenkins/requiredPlugins.md b/documentation/docs/jenkins/requiredPlugins.md new file mode 100644 index 000000000..18be05b37 --- /dev/null +++ b/documentation/docs/jenkins/requiredPlugins.md @@ -0,0 +1,57 @@ +# Required Plugins + +The following Jenkins plugins are needed in order to use the Piper Library. +The list below contains the plugin Id and version of the plugin. + +**Plugins** + +- ace-editor 1.1 +- authentication-tokens 1.3 +- bouncycastle-api 2.16.2 +- branch-api 2.0.14 +- cloudbees-folder 6.2.1 +- credentials 2.1.16 +- credentials-binding 1.13 +- display-url-api 2.1.0 +- docker-commons 1.9 +- docker-workflow 1.10 +- durable-task 1.15 +- git 3.6.2 +- git-client 2.5.0 +- git-server 1.7 +- handlebars 1.1.1 +- icon-shim 2.0.3 +- jquery-detached 1.2.1 +- junit 1.21 +- mailer 1.20 +- matrix-project 1.12 +- momentjs 1.1.1 +- pipeline-build-step 2.5.1 +- pipeline-graph-analysis 1.3 +- pipeline-input-step 2.8 +- pipeline-milestone-step 1.3.1 +- pipeline-model-api 1.2.2 +- pipeline-model-definition 1.1.1 +- pipeline-model-extensions 1.1.1 +- pipeline-rest-api 2.6 +- pipeline-stage-step 2.2 +- pipeline-stage-tags-metadata 1.2.2 +- pipeline-stage-view 2.6 +- pipeline-utility-steps 1.3.0 +- plain-credentials 1.4 +- scm-api 2.2.3 +- script-security 1.34 +- ssh-credentials 1.13 +- structs 1.10 +- workflow-aggregator 2.5 +- workflow-api 2.23.1 +- workflow-basic-steps 2.6 +- workflow-cps 2.41 +- workflow-cps-global-lib 2.7 +- workflow-durable-task-step 2.17 +- workflow-job 2.12.2 +- workflow-multibranch 2.14 +- workflow-scm-step 2.6 +- workflow-step-api 2.13 +- workflow-support 2.16 + diff --git a/documentation/docs/scripts/fileUtils.md b/documentation/docs/scripts/fileUtils.md new file mode 100644 index 000000000..2e2ac2518 --- /dev/null +++ b/documentation/docs/scripts/fileUtils.md @@ -0,0 +1,62 @@ +# FileUtils + +## Description +Provides file system related utility functions. + +## Constructor +Since there are only static utility methods there is no need for instantiating objects. + +## Method Details + +### validateDirectory(dir) + +#### Description +Checks whether a file exists and is a directory. + +#### Parameters + +* `dir` - directory to be checked. In case it is relative path it is checked against the +current working directory. In case of doubt use the absolute path (prefix the directory with `pwd`). + +#### Return value +none + +#### Side effects +none + +#### Exceptions +* `IllegalArgumentException`: If the parameter `dir` is null or empty. +* `AbortException`: If the directory does not exist or is not a directory. + +#### Example + +```groovy +FileUtils.validateDirectory('/path/to/dir') +``` + +### validateDirectoryIsNotEmpty(dir) + +#### Description +Check whether a directory is not empty. Before the directory is checked, `validateDirectory(dir)` is executed. + +#### Parameters + +* `dir` - directory to be checked. In case it is relative path it is checked against the +current working directory. In case of doubt use the absolute path (prefix the directory with `pwd`). + +#### Return value +none + +#### Side effects +none + +#### Exceptions +* `IllegalArgumentException`: If the parameter `dir` is null or empty. +* `AbortException`: If the directory does not exist or is not a directory or the directory is empty. + +#### Example + +```groovy +FileUtils.validateDirectoryIsNotEmpty('/path/to/dir') +``` + diff --git a/documentation/docs/scripts/utils.md b/documentation/docs/scripts/utils.md new file mode 100644 index 000000000..3773c4299 --- /dev/null +++ b/documentation/docs/scripts/utils.md @@ -0,0 +1,75 @@ +# Utils + +## Description +Provides utility functions. + +## Constructors + +### Utils() + +Default no-argument constructor. Instances of the Utils class does not hold any instance specific state. + +#### Example + +```groovy +new Utils() +``` + +## Method Details + +### getMandatoryParameter(Map map, paramName, defaultValue) + +#### Description + +Retrieves the parameter value for parameter `paramName` from parameter map `map`. In case there is no parameter with the given key contained in parameter map `map` `defaultValue` is returned. In case there no such parameter contained in `map` and `defaultValue` is `null` an exception is thrown. + +#### Parameters + +* `map` - A map containing configuration parameters. +* `paramName` - The key of the parameter which should be looked up. +* `defaultValue` - The value which is returned in case there is no parameter with key `paramName` contained in `map`. + +#### Return value +The value to the parameter to be retrieved, or the default value if the former is `null`, either since there is no such key or the key is associated with value `null`. In case the parameter is not defined or the value for that parameter is `null`and there is no default value an exception is thrown. + +#### Side effects + +none + +#### Exceptions +* `Exception`: If the value to be retrieved and the default value are both `null`. + +#### Example + +```groovy +def utils = new Utils() +def parameters = [DEPLOY_ACCOUNT: 'deploy-account'] +assert utils.getMandatoryParameter(parameters, 'DEPLOY_ACCOUNT', null) == 'deploy-account' +assert utils.getMandatoryParameter(parameters, 'DEPLOY_USER', 'john_doe') == 'john_doe' +``` + +### retrieveGitCoordinates(script) + +#### Description +Retrieves the git-remote-url and git-branch. The parameters 'GIT_URL' and 'GIT_BRANCH' are retrieved from Jenkins job configuration. If these are not set, the git-url and git-branch are retrieved from the same repository where the Jenkinsfile resides. + + +#### Parameters + +* `script` The script calling the method. Basically the `Jenkinsfile`. It is assumed that the script provides access to the parameters defined when launching the build, especially `GIT_URL`and `GIT_BRANCH`. + +#### Return value + +A map containing git-url and git-branch: `[url: gitUrl, branch: gitBranch]` + +## Exceptions + +* `AbortException`: if only one of `GIT_URL`, `GIT_BRANCH` is set in the Jenkins job configuration. + +#### Example + +```groovy +def gitCoordinates = new Utils().retrieveGitCoordinates(this) +def gitUrl = gitCoordinates.url +def gitBranch = gitCoordinates.branch +``` diff --git a/documentation/docs/scripts/version.md b/documentation/docs/scripts/version.md new file mode 100644 index 000000000..6fbb6cc13 --- /dev/null +++ b/documentation/docs/scripts/version.md @@ -0,0 +1,161 @@ +# Version + +## Description +Handles version numbers. + +## Constructors + +### Version(major, minor, patch) + +#### Parameters + +| parameter | mandatory | default | possible values | +| ----------|-----------|---------|-----------------| +| major | yes | | | +| minor | yes | | | +| patch | no | `-1` | | + +* `major` - the major version number. +* `minor` - the minor version number. +* `patch` - the patch version number. + +#### Exceptions + +* `IllegalArgumentException`: If the `major` or `minor` version number is less than `0`. + +#### Example + +```groovy +def toolVersion = new Version(1, 2, 3) +``` + +### Version(text) + +#### Parameters + +| parameter | mandatory | default | possible values | +| ----------|-----------|---------|-----------------| +| text | yes | | | + +* `text` - as an alternative to calling the constructor with `major`, `minor`, and `patch` version numbers, you can pass this as a String of format 'major.minor.patch'. + +#### Exceptions + +* `IllegalArgumentException`: If the `text` parameter is `null` or empty. +* `AbortException`: If the version `text` has an unexpected format. + +#### Example + +```groovy +def toolVersion = new Version('1.2.3') +``` + +## Method Details + +### equals + +#### Description +Indicates whether some other version instance is equal to this one. The two versions are considered equal when they have the same `major`, `minor` and `patch` version number. + +#### Parameters + +* `version` - the Version instance to compare to this Version instance. + +#### Return value + +`true` if `major`, `minor` and `patch` version numbers are equal to each other. Otherwise `false`. + +#### Side effects + +none + +#### Exceptions + +* `AbortException`: If the parameter `version` is `null`. + +#### Example + +```groovy +assert new Version('1.2.3').equals(new Version('1.2.3')) +``` + +### isCompatibleVersion + +#### Description +Checks whether a version is compatible. Two versions are compatible if the major version number is the same, while the minor and patch version number are the same or higher. + +#### Parameters + +* `version` - the Version instance to compare to this Version instance. + +#### Return value + +`true` if this Version instance is compatible to the other Version instance. Otherwise `false`. + +#### Side effects + +none + +#### Exceptions + +* `AbortException`: If the parameter `version` is `null`. + +#### Example + +```groovy +assert new Version('1.2.3').isCompatibleVersion(new Version('1.3.1')) +``` + +### isHigher + +#### Description +Checks whether this Version instance is higher than the other Version instance. + +#### Parameters + +* `version` - the Version instance to compare to this Version instance. + +#### Return value + +`true` if this Version instance is higher than the other Version instance. Otherwise `false`. + +#### Side effects + +none + +#### Exceptions + +* `AbortException`: If the parameter `version` is `null`. + +#### Example + +```groovy +assert new Version('1.2.3').isHigher(new Version('1.1.6')) +``` + +### toString + +#### Description +Print the version number in format '..'. If no patch version number exists the format is '.'. + +#### Parameters + +none + +#### Return value + +A String consisting of `major`, `minor` and if available `patch`, separated by dots. + +#### Side effects + +none + +#### Exceptions + +none + +#### Example + +```groovy +assert "${new Version('1.2.3')}" == "1.2.3" +``` diff --git a/documentation/docs/steps/commonPipelineEnvironment.md b/documentation/docs/steps/commonPipelineEnvironment.md new file mode 100644 index 000000000..2841081e3 --- /dev/null +++ b/documentation/docs/steps/commonPipelineEnvironment.md @@ -0,0 +1,141 @@ +# commonPipelineEnvironment + +## Description +Provides project specific settings. + +## Prerequisites +none + +## Method details + +### getConfigProperties() + +#### Description +Returns the map of project specific configuration properties. No defensive copy is created. +Write operations to the map are visible further down in the pipeline. + +#### Parameters +none + +#### Return value +A map containing project specific configuration properties. + +#### Side effects +none + +#### Exceptions +none + +#### Example + +```groovy +commonPipelineEnvironment.getConfigProperties() +``` + +### setConfigProperties(configuration) + +#### Description +Sets the map of configuration properties. An existing map is overwritten. + +#### Parameters +* configuration - A map containing the new configuration + +#### Return value +none + +#### Side effects +none + +#### Exceptions +none + +#### Example +```groovy +commonPipelineEnvironment.setConfigProperties([DEPLOY_HOST: 'deploy-host.com', DEPLOY_ACCOUNT: 'deploy-account']) +``` + +### getConfigProperty(key) + +#### Description +Gets a specific value from the configuration property. + +#### Parameters +* key - The key of the property. + +#### Return value +* The value associated with key `key`. `null` is returned in case the property does not exist. + +#### Side effects +none + +#### Exceptions +none + +#### Example +```groovy +commonPipelineEnvironment.getConfigProperty('DEPLOY_HOST') +``` + +### setConfigProperty(key, value) + +#### Description +Sets property `key` with value `value`. Any existing property with key `key`is overwritten. + +#### Parameters +* `key` The key +* `value` The value + +#### Return value +none + +#### Side effects +none + +#### Exceptions +none + +#### Example + +```groovy +commonPipelineEnvironment.setConfigProperty('DEPLOY_HOST', 'my-deploy-host.com') +``` + +### getMtarFileName() + +#### Description +Returns the name of the mtar file. + +#### Parameters +none + +#### Side effects +none + +#### Exceptions +none + +#### Example + +```groovy +commonPipelineEnvironment.getMtarFileName() +``` + +### setMtarFileName(name) + +#### Description +Sets the name of the mtar file. Any old value is discarded. + +#### Parameters +The name of the mtar file name. + +#### Side effects +none + +#### Exceptions +none + +#### Example + +```groovy +commonPipelineEnvironment.setMtarFileName('foo') +``` diff --git a/documentation/docs/steps/commonPipelineEnvironment/getConfigProperties.md b/documentation/docs/steps/commonPipelineEnvironment/getConfigProperties.md new file mode 100644 index 000000000..8a66a923a --- /dev/null +++ b/documentation/docs/steps/commonPipelineEnvironment/getConfigProperties.md @@ -0,0 +1,26 @@ +# getConfigProperties + +## Description +Gets a `map` of configuration properties stored in the `commonPipelineEnvironment` object. + +## Parameters + +none + +## Return values + +A `map` of the current configuration properties setup in the `commonPipelineEnvironment` object. + +## Side effects + +none + +## Exceptions + +none + +## Example + +```groovy +def propertiesMap = commonPipelineEnvironment.getConfigProperties() +``` diff --git a/documentation/docs/steps/commonPipelineEnvironment/getConfigProperty.md b/documentation/docs/steps/commonPipelineEnvironment/getConfigProperty.md new file mode 100644 index 000000000..13c2035bc --- /dev/null +++ b/documentation/docs/steps/commonPipelineEnvironment/getConfigProperty.md @@ -0,0 +1,30 @@ +# getConfigProperty + +## Description +Gets a specific value from the configuration properties stored in the `commonPipelineEnvironment` object. + +## Parameters + +| parameter | mandatory | default | possible values | +| -----------|-----------|---------|-----------------| +| `property` | yes | | | + +* `property` - the specific property to be retrieved from the configuration properties stored in the `commonPipelineEnvironment` object. + +## Return values + +The value of the property in the configuration properties stored in the `commonPipelineEnvironment` object. + +## Side effects + +none + +## Exceptions + +none + +## Example + +```groovy +def deployHost = commonPipelineEnvironment.getConfigProperty('DEPLOY_HOST') +``` \ No newline at end of file diff --git a/documentation/docs/steps/commonPipelineEnvironment/getMtarFileName.md b/documentation/docs/steps/commonPipelineEnvironment/getMtarFileName.md new file mode 100644 index 000000000..cdadd2397 --- /dev/null +++ b/documentation/docs/steps/commonPipelineEnvironment/getMtarFileName.md @@ -0,0 +1,26 @@ +# getMtarFileName + +## Description +Gets the file name of the mtar archive. The mtar archive is created in the [mtaBuild](../../steps/mtaBuild) step. + +## Parameters + +none + +## Return values + +The mtar archive file name stored in the `commonPipelineEnvironment` object. + +## Side effects + +none + +## Exceptions + +none + +## Example + +```groovy +def mtarFileName = commonPipelineEnvironment.getMtarFileName() +``` diff --git a/documentation/docs/steps/commonPipelineEnvironment/setConfigProperties.md b/documentation/docs/steps/commonPipelineEnvironment/setConfigProperties.md new file mode 100644 index 000000000..f2edb1be5 --- /dev/null +++ b/documentation/docs/steps/commonPipelineEnvironment/setConfigProperties.md @@ -0,0 +1,33 @@ +# setConfigProperties + +## Description +Sets the map of configuration properties stored in the `commonPipelineEnvironment` object. +Any existing `configProperties` map is overwritten. + +## Parameters + +| parameter | mandatory | default | possible values | +| ----------|-----------|---------|-----------------| +| `map` | yes | | | + +* `map` - the map of configuration properties to set in the `commonPipelineEnvironment` object. + +## Return values + +none + +## Side effects + +none + +## Exceptions + +none + +## Example + +```groovy +def map = [DEPLOY_HOST: 'deploy-host.com', DEPLOY_ACCOUNT: 'deploy-account'] +commonPipelineEnvironment.setConfigProperties(map) +``` + diff --git a/documentation/docs/steps/commonPipelineEnvironment/setConfigProperty.md b/documentation/docs/steps/commonPipelineEnvironment/setConfigProperty.md new file mode 100644 index 000000000..5e426a6e9 --- /dev/null +++ b/documentation/docs/steps/commonPipelineEnvironment/setConfigProperty.md @@ -0,0 +1,34 @@ +# setConfigProperty + +## Description +Sets a specific property of the configuration stored in the `commonPipelineEnvironment` object. +Any existing property is overwritten. + +## Parameters + +| parameter | mandatory | default | possible values | +| -----------|-----------|---------|-----------------| +| `property` | yes | | | +| `value` | yes | | | + +* `property` - property key to set in the `commonPipelineEnvironment` object. +* `value`- the value to set the property to. + +## Return values + +none + +## Side effects + +none + +## Exceptions + +none + +## Example + +```groovy +commonPipelineEnvironment.setConfigProperty('DEPLOY_HOST', 'my-deploy-host.com') +``` + diff --git a/documentation/docs/steps/commonPipelineEnvironment/setMtarFileName.md b/documentation/docs/steps/commonPipelineEnvironment/setMtarFileName.md new file mode 100644 index 000000000..a11374bb0 --- /dev/null +++ b/documentation/docs/steps/commonPipelineEnvironment/setMtarFileName.md @@ -0,0 +1,31 @@ +# setMtarFileName + +## Description +Sets the file name of the mtar archive. The mtar archive is created in the [mtaBuild](../../steps/mtaBuild) step. +This does not change the file name of the actual mtar archive file. + +## Parameters + +| parameter | mandatory | default | possible values | +| ---------------|-----------|---------|-----------------| +| `mtarFileName` | yes | | | + +* `mtarFileName` - the String to be set as value for `mtarFileName` in `commonPipelineEnvironment`. + +## Return values + +none + +## Side effects + +none + +## Exceptions + +none + +## Example + +```groovy +commonPipelineEnvironment.setMtarFileName('my.file.name.mtar') +``` diff --git a/documentation/docs/steps/handlePipelineStepErrors.md b/documentation/docs/steps/handlePipelineStepErrors.md new file mode 100644 index 000000000..6125c6451 --- /dev/null +++ b/documentation/docs/steps/handlePipelineStepErrors.md @@ -0,0 +1,63 @@ +# handlePipelineStepErrors + +## Description +Used by other steps to make error analysis easier. Lists parameters and other data available to the step in which the error occurs. + +## Prerequisites +none + +## Parameters + +| parameter | mandatory | default | possible values | +| -----------------|-----------|---------|-----------------| +| `stepParameters` | yes | | | +| `stepName` | yes | | | +| `echoDetails` | yes | true | true, false | + +* `stepParameters` - The parameters from the step to be executed. The list of parameters is then shown in the console output. +* `stepName` - The name of the step executed to be shown in the console output. +* `echoDetails` - if set to true will output the following as console output: + 1. Step beginning: `--- BEGIN LIBRARY STEP: ${stepName}.groovy ---` + 2. Step end: `--- END LIBRARY STEP: ${stepName}.groovy ---` + 3. Step errors: + ``` + ---------------------------------------------------------- + --- ERROR OCCURED IN LIBRARY STEP: ${stepName} + ---------------------------------------------------------- + FOLLOWING PARAMETERS WERE AVAILABLE TO THIS STEP: + *** + ${stepParameters} + *** + ERROR WAS: + *** + ${err} + *** + FURTHER INFORMATION: + * Documentation of step ${stepName}: .../${stepName}/ + * Pipeline documentation: https://... + * GitHub repository for pipeline steps: https://... + ---------------------------------------------------------- + ``` + +## Return value + +none + +## Side effects + +none + +## Exceptions + +none + +## Example + +```groovy +handlePipelineStepErrors (stepName: 'executeHealthCheck', stepParameters: parameters) { + def url = new Utils().getMandatoryParameter(parameters, 'url', null) + def statusCode = curl(url) + if (statusCode != '200') + error "Health Check failed: ${statusCode}" +} +``` diff --git a/documentation/docs/steps/mtaBuild.md b/documentation/docs/steps/mtaBuild.md new file mode 100644 index 000000000..768feb79d --- /dev/null +++ b/documentation/docs/steps/mtaBuild.md @@ -0,0 +1,45 @@ +# mtaBuild + +## Description +Executes the SAP MTA Archive Builder to create an mtar archive of the application. + +## Prerequisites + +* **SAP MTA Archive Builder** - available for download on the SAP Marketplace. +* **Java 8 or higher** - necessary to run the `mta.jar` file. +* **NodeJS installed** - the MTA Builder uses `npm` to download node module dependencies such as `grunt`. + +## Parameters + +| parameter | mandatory | default | possible values | +| -----------------|-----------|-----------------------------------|--------------------| +| `script` | yes | | | +| `buildTarget` | yes | | 'CF', 'NEO', 'XSA' | +| `mtaJarLocation` | no | | | + +* `script` The common script environment of the Jenkinsfile running. Typically the reference to the script calling the pipeline step is provided with the `this` parameter, as in `script: this`. This allows the function to access the [`commonPipelineEnvironment`](commonPipelineEnvironment.md) for retrieving, for example, configuration parameters. +* `buildTarget` The target platform to which the mtar can be deployed. +* `mtaJarLocation` The path of the `mta.jar` file. If no parameter is provided, the path is retrieved from the Jenkins environment variables using `env.MTA_JAR_LOCATION`. If the Jenkins environment variable is not set it is assumed that `mta.jar` is located in the current working directory. + +## Return value + +The file name of the resulting archive is returned with this step. The file name is extracted from the key `ID` defined in `mta.yaml`. + +## Side effects + +1. The file name of the resulting archive is written to the `commonPipelineEnvironment` with variable name `mtarFileName`. +2. As version number the timestamp is written into the `mta.yaml` file, that is packaged into the built archive. + +## Exceptions + +* `AbortException` + * If there is an invalid `buildTarget`. + * If there is no key `ID` inside the `mta.yaml` file. + +## Example +```groovy +def mtarFileName +dir('/path/to/FioriApp'){ + mtarFileName = mtaBuild script:this, buildTarget: 'NEO' +} +``` diff --git a/documentation/docs/steps/neoDeploy.md b/documentation/docs/steps/neoDeploy.md new file mode 100644 index 000000000..d633c364f --- /dev/null +++ b/documentation/docs/steps/neoDeploy.md @@ -0,0 +1,61 @@ +# neoDeploy + +## Description +Deploys an Application to SAP Cloud Platform (SAP CP) using the SAP Cloud Platform Console Client (Neo Java Web SDK). + +## Prerequisites + +* **SAP CP account** - the account to where the application is deployed. +* **SAP CP user for deployment** - a user with deployment permissions in the given account. +* **Jenkins credentials for deployment** - must be configured in Jenkins credentials with a dedicated Id. + +![Jenkins credentials configuration](../images/neo_credentials.png) + +* **Neo Java Web SDK** - can be downloaded from [Maven Central](http://central.maven.org/maven2/com/sap/cloud/neo-java-web-sdk/). The Neo Java Web SDK +needs to be extracted into the folder provided by `neoHome`. In case this parameters is not provided and there is no NEO_HOME parameter in the environment +`/tools` needs to be in the `PATH`. + +* **Java 8 or higher** - needed by the *Neo-Java-Web-SDK* + +## Parameters + +| parameter | mandatory | default | possible values | +| -------------------|-----------|------------------------------------------------------------------------------------------|-----------------| +| `script` | yes | | | +| `archivePath` | yes | | | +| `deployHost` | no | `'DEPLOY_HOST'` from `commonPipelineEnvironment` | | +| `deployAccount` | no | `'CI_DEPLOY_ACCOUNT'` from `commonPipelineEnvironment` | | +| `neoCredentialsId` | no | `'CI_CREDENTIALS_ID'` | | +| `neoHome` | no | Environment is checked for `NEO_HOME`, otherwise the neo toolset is expected in the path | | + +* `script` The common script environment of the Jenkinsfile run. Typically `this` is passed to this parameter. This allows the function to access the [`commonPipelineEnvironment`](commonPipelineEnvironment.md) for retrieving e.g. configuration parameters. +* `archivePath` The path to the archive for deployment to SAP CP. +* `deployHost` The SAP Cloud Platform host to deploy to. +* `deployAccount` The SAP Cloud Platform account to deploy to. +* `credentialsId` The Jenkins credentials containing user and password used for SAP CP deployment. +* `neoHome` The path to the `neo-java-web-sdk` tool used for SAP CP deployment. If no parameter is provided, the path is retrieved from the Jenkins environment variables using `env.NEO_HOME`. If this Jenkins environment variable is not set it is assumed that the tool is available in the `PATH`. + +## Return value + +none + +## Side effects + +none + +## Exceptions + +* `Exception` + * If `archivePath` is not provided. +* `AbortException + * If neo-java-web-sdk is not installed, or `neoHome`is wrong. + * If `deployHost` is wrong. + * If `deployAccount` is wrong. +* `CredentialNotFoundException` + * If the credentials cannot be resolved. + +## Example + +```groovy +neoDeploy script: this, archivePath: 'path/to/archiveFile.mtar', credentialsId: 'my-credentials-id' +``` diff --git a/documentation/docs/steps/setupCommonPipelineEnvironment.md b/documentation/docs/steps/setupCommonPipelineEnvironment.md new file mode 100644 index 000000000..53628e111 --- /dev/null +++ b/documentation/docs/steps/setupCommonPipelineEnvironment.md @@ -0,0 +1,40 @@ +# setupCommonPipelineEnvironment + +## Description +Initializes the [`commonPipelineEnvironment`](commonPipelineEnvironment.md), which is used throughout the complete pipeline. + +!!! tip + This step needs to run at the beginning of a pipeline right after the SCM checkout. + Then subsequent pipeline steps consume the information from `commonPipelineEnvironment`; it does not need to be passed to pipeline steps explicitly. + +## Prerequisites + +* A **configuration file** with properties (default location: `.pipeline/config.properties`). The property values are used as default values in many pipeline steps. + +## Parameters + +| parameter | mandatory | default | possible values | +| ------------ |-----------|-------------------------------|-----------------| +| `script` | yes | - | | +| `configFile` | no | `.pipeline/config.properties` | | + +* `script` - The reference to the pipeline script (Jenkinsfile). Normally `this` needs to be provided. +* `configFile` - Property file defining project specific settings. + +## Return value + +none + +## Side effects + +none + +## Exceptions + +none + +## Example + +```groovy +setupCommonPipelineEnvironment script: this +``` diff --git a/documentation/docs/steps/toolValidate.md b/documentation/docs/steps/toolValidate.md new file mode 100644 index 000000000..7f0eda7ee --- /dev/null +++ b/documentation/docs/steps/toolValidate.md @@ -0,0 +1,33 @@ +# toolValidate + +## Description + +Checks the existence and compatibility of a tool, necessary for a successful pipeline execution. +In case a violation is found, an exception is raised. + +## Parameters + +| parameter | mandatory | default | possible values | +| -----------------|-----------|-----------------------------------|----------------------------| +| `tool` | yes | | 'java', 'mta', 'neo' | +| `home` | yes | | | + +* `tool` The tool that is checked for existence and compatible version. +* `home` The location in the file system where Jenkins can access the tool. + +## Exceptions + +* `IllegalArgumentException` + * If at least one of the parameters `tool`, `home` is not provided. +* `AbortException` + * If `tool` is not supported. + +## Example + +```groovy +toolValidate tool: 'neo', home:'/path/to/neo-java-web-sdk' +``` + + + + diff --git a/documentation/mkdocs.yml b/documentation/mkdocs.yml new file mode 100644 index 000000000..4771f10fa --- /dev/null +++ b/documentation/mkdocs.yml @@ -0,0 +1,38 @@ +site_name: Jenkins 2.0 Pipelines +pages: + - Home: index.md + - 'Library steps': + - commonPipelineEnvironment: steps/commonPipelineEnvironment.md + - handlePipelineStepErrors: steps/handlePipelineStepErrors.md + - toolValidate: steps/toolValidate.md + - mtaBuild: steps/mtaBuild.md + - neoDeploy: steps/neoDeploy.md + - setupCommonPipelineEnvironment: steps/setupCommonPipelineEnvironment.md + - 'Library scripts': + - FileUtils: scripts/fileUtils.md + - Utils: scripts/utils.md + - Version: scripts/version.md + - 'Required Plugins': jenkins/requiredPlugins.md + +theme: 'material' +extra: + logo: 'images/piper_head_white.png' + site_favicon: 'images/favicon.ico' + palette: + primary: 'teal' + accent: 'purple' + font: + text: 'Slabo 13px' + code: 'Ubuntu Mono' +markdown_extensions: + - admonition + - codehilite(guess_lang=false) + - toc(permalink=true) + - footnotes + - pymdownx.superfences +extra_css: + - 'css/extra.css' +edit_uri: edit/master/documentation/docs +docs_dir: docs +site_dir: docs-gen +repo_url: https://github.com/SAP/jenkins-library diff --git a/pom.xml b/pom.xml new file mode 100644 index 000000000..9bcdd3474 --- /dev/null +++ b/pom.xml @@ -0,0 +1,252 @@ + + + + + org.jenkins-ci.plugins + plugin + 2.21 + + 4.0.0 + com.sap.cp.jenkins + pipeline-library + 0.0.1 + + SAP CP Piper Library + + + + repo.jenkins-ci.org + https://repo.jenkins-ci.org/public/ + + + + + + repo.jenkins-ci.org + https://repo.jenkins-ci.org/public/ + + + + + 2.32.3 + 2.5 + 2.6 + 2.28 + + + + + + + org.jenkins-ci.plugins.workflow + workflow-aggregator + ${pipeline.version} + + + + org.jenkins-ci.plugins.workflow + workflow-cps-global-lib + ${cps.global.lib.version} + + + + org.jenkins-ci.plugins + http_request + 1.8.13 + + + + + org.jenkins-ci.plugins.workflow + workflow-api + 2.12 + + + + + org.jenkins-ci.plugins.workflow + workflow-support + 2.13 + + + + + + + + org.jenkins-ci.plugins.workflow + workflow-cps + ${workflow-cps-plugin.version} + + + org.jenkins-ci.plugins + git-server + 1.5 + + + org.apache.httpcomponents + httpclient + + + + + org.jenkins-ci.plugins + git-client + 1.19.7 + test + + + org.jenkins-ci.plugins + scm-api + 1.3 + + + org.jenkins-ci.plugins + cloudbees-folder + 5.12 + + + org.jenkins-ci.plugins.workflow + workflow-scm-step + 2.3 + + + + org.apache.ivy + ivy + 2.4.0 + + + org.apache.commons + commons-lang3 + 3.5 + + + + + org.jenkins-ci.plugins + ssh-agent + 1.15 + test + + + + org.jenkins-ci.plugins.workflow + workflow-job + 2.9 + test + + + org.jenkins-ci.plugins.workflow + workflow-basic-steps + 2.3 + test + + + org.jenkins-ci.plugins.workflow + workflow-durable-task-step + 2.8 + test + + + org.jenkins-ci.plugins + git + 3.0.1 + test + + + org.jenkins-ci.plugins + performance + 2.1 + test + + + + org.jenkins-ci.plugins.workflow + workflow-step-api + 2.9 + test + + + + org.jenkins-ci.plugins + pipeline-utility-steps + 1.3.0 + test + + + + org.jenkins-ci.plugins + subversion + 2.7.1 + test + + + org.tmatesoft.svnkit + svnkit-cli + 1.8.14 + test + + + + + com.lesfurets + jenkins-pipeline-unit + 1.1 + test + + + + src + + + org.codehaus.mojo + build-helper-maven-plugin + 1.12 + + + add-test-source + generate-sources + + add-test-source + + + + test/java + test/groovy + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.19.1 + + test/java + + + + maven-compiler-plugin + 3.1 + + groovy-eclipse-compiler + + + + org.codehaus.groovy + groovy-eclipse-compiler + 2.9.2-01 + + + org.codehaus.groovy + groovy-eclipse-batch + 2.4.3-01 + + + + + + diff --git a/src/com/sap/piper/FileUtils.groovy b/src/com/sap/piper/FileUtils.groovy new file mode 100644 index 000000000..5f62d9987 --- /dev/null +++ b/src/com/sap/piper/FileUtils.groovy @@ -0,0 +1,21 @@ +package com.sap.piper + +import hudson.AbortException +import java.io.File + + +class FileUtils implements Serializable { + + static validateDirectory(dir) { + if (!dir) throw new IllegalArgumentException("The parameter 'dir' can not be null or empty.") + def file = new File(dir) + if (!file.exists()) throw new AbortException("'${file.getAbsolutePath()}' does not exist.") + if (!file.isDirectory()) throw new AbortException("'${file.getAbsolutePath()}' is not a directory.") + } + + static validateDirectoryIsNotEmpty(dir) { + validateDirectory(dir) + def file = new File(dir) + if (file.list().size() == 0) throw new AbortException("'${file.getAbsolutePath()}' is empty.") + } +} diff --git a/src/com/sap/piper/Utils.groovy b/src/com/sap/piper/Utils.groovy new file mode 100644 index 000000000..647fda5d8 --- /dev/null +++ b/src/com/sap/piper/Utils.groovy @@ -0,0 +1,37 @@ +package com.sap.piper + +import com.cloudbees.groovy.cps.NonCPS + +@NonCPS +def getMandatoryParameter(Map map, paramName, defaultValue) { + + def paramValue = map[paramName] + + if (paramValue == null) + paramValue = defaultValue + + if (paramValue == null) + throw new Exception("ERROR - NO VALUE AVAILABLE FOR ${paramName}") + return paramValue + +} + +def retrieveGitCoordinates(script){ + def gitUrl = script.params.GIT_URL + def gitBranch = script.params.GIT_BRANCH + if(!gitUrl && !gitBranch) { + echo "[INFO] Parameters 'GIT_URL' and 'GIT_BRANCH' not set in Jenkins job configuration. Assuming application to be built is contained in the same repository as this Jenkinsfile." + gitUrl = scm.userRemoteConfigs[0].url + gitBranch = scm.branches[0].name + } + else if(!gitBranch) { + error "Parameter 'GIT_BRANCH' not set in Jenkins job configuration. Either set both GIT_URL and GIT_BRANCH of the application to be built as Jenkins job parameters or put this Jenkinsfile into the same repository as the application to be built." + } + else if(!gitUrl) { + error "Parameter 'GIT_URL' not set in Jenkins job configuration. Either set both GIT_URL and GIT_BRANCH of the application to be built as Jenkins job parameters or put this Jenkinsfile into the same repository as the application to be built." + } + echo "[INFO] Building '${gitBranch}@${gitUrl}'." + + return [url: gitUrl, branch: gitBranch] +} + diff --git a/src/com/sap/piper/Version.groovy b/src/com/sap/piper/Version.groovy new file mode 100644 index 000000000..ec282e14a --- /dev/null +++ b/src/com/sap/piper/Version.groovy @@ -0,0 +1,52 @@ +package com.sap.piper + +import hudson.AbortException + + +class Version implements Serializable { + + final def major + final def minor + final def patch + + Version(major, minor, patch = -1) { + if (major < 0) throw new IllegalArgumentException("The parameter 'major' can not have a value less than 0.") + if (minor < 0) throw new IllegalArgumentException("The parameter 'minor' can not have a value less than 0.") + this.major = major + this.minor = minor + this.patch = patch + } + + Version(text) { + if (!text) throw new IllegalArgumentException("The parameter 'text' can not be null or empty.") + def group = text =~ /(\d+[.]\d+[.]\d+)/ + if (!group) throw new AbortException("The version '$text' has an unexpected format. The expected format is .") + def i = group[0].size()-1 + def versionNumbers = group[0][i].split("\\.") + major = versionNumbers[0].toInteger() + minor = versionNumbers[1].toInteger() + patch = versionNumbers[2].toInteger() + } + + @Override + boolean equals(version) { + if (!version) throw new IllegalArgumentException("The parameter 'version' can not be null.") + return major == version.major && minor == version.minor && patch == version.patch + } + + def isHigher(version) { + if (!version) throw new IllegalArgumentException("The parameter 'version' can not be null.") + return major > version.major || major == version.major && ( minor > version.minor || minor == version.minor && patch > version.patch) + } + + def isCompatibleVersion(version) { + if (!version) throw new IllegalArgumentException("The parameter 'version' can not be null.") + return this == version || isHigher(version) && major == version.major + } + + @Override + String toString() { + return patch != -1 ? "$major.$minor.$patch".toString() : "$major.$minor".toString() + } +} + diff --git a/template/step.groovy b/template/step.groovy new file mode 100644 index 000000000..69cf13282 --- /dev/null +++ b/template/step.groovy @@ -0,0 +1,21 @@ +import com.cloudbees.groovy.cps.NonCPS +import com.sap.piper.Utils +/** + * Name of library step + * + * @param script global script environment of the Jenkinsfile run + * @param others document all parameters + */ +def call(Map parameters = [:], body) { + //ToDo: Change parameter stepName + handlePipelineStepErrors (stepName: 'stepName', stepParameters: parameters) { + def utils = new Utils() + def script = parameters.script + if (script == null) + script = [commonPipelineEnvironment: commonPipelineEnvironment] + //mandatory parameter - default cannot be null + def mandatoryPara = utils.getMandatoryParameter(parameters, 'paramName', 'param_default') + //optional parameter - default can be null + def param1 = parameters.get('param1Name') + } +} diff --git a/template/step.md b/template/step.md new file mode 100644 index 000000000..da1cc7e32 --- /dev/null +++ b/template/step.md @@ -0,0 +1,33 @@ +# + +## Description + + +## Prerequisites + +* **** - further description. + +## Parameters + +| parameter | mandatory | default | possible values | +| ---------------|-----------|-----------------------------------|--------------------| +| | | | | + +* detailed description of each parameter. + +## Return value + +none + +## Side effects + +none + +## Exceptions + +none + +## Example +```groovy + +``` diff --git a/test/groovy/FileUtilsTest.groovy b/test/groovy/FileUtilsTest.groovy new file mode 100644 index 000000000..e5946974f --- /dev/null +++ b/test/groovy/FileUtilsTest.groovy @@ -0,0 +1,93 @@ +import org.junit.Rule +import org.junit.Before +import org.junit.Test +import org.junit.rules.ExpectedException +import org.junit.rules.TemporaryFolder + +import hudson.AbortException + +import com.sap.piper.FileUtils + + +class FileUtilsTest { + + @Rule + public ExpectedException thrown = new ExpectedException().none() + + @Rule + public TemporaryFolder tmp = new TemporaryFolder() + + private File emptyDir + private File notEmptyDir + private File notDir + + + @Before + void setup() { + + emptyDir = tmp.newFolder('emptyDir') + notEmptyDir = tmp.newFolder('notEmptyDir') + File file = new File("${notEmptyDir.getAbsolutePath()}${File.separator}test.txt") + file.createNewFile() + notDir = tmp.newFile('noDir') + } + + @Test + void nullValidateDirectoryTest() { + + thrown.expect(IllegalArgumentException) + thrown.expectMessage("The parameter 'dir' can not be null or empty.") + + FileUtils.validateDirectory(null) + } + + @Test + void emptyValidateDirectoryTest() { + + thrown.expect(IllegalArgumentException) + thrown.expectMessage("The parameter 'dir' can not be null or empty.") + + FileUtils.validateDirectory('') + } + + @Test + void doestNotExistValidateDirectoryTest() { + + def path = "${emptyDir.getAbsolutePath()}${File.separator}test" + + thrown.expect(AbortException) + thrown.expectMessage("'$path' does not exist.") + + FileUtils.validateDirectory(path) + } + + @Test + void isNotDirectoryValidateDirectoryTest() { + + thrown.expect(AbortException) + thrown.expectMessage("'${notDir.getAbsolutePath()}' is not a directory.") + + FileUtils.validateDirectory(notDir.getAbsolutePath()) + } + + @Test + void validateDirectoryTest() { + + FileUtils.validateDirectory(notEmptyDir.getAbsolutePath()) + } + + @Test + void emptyDirValidateDirectoryIsNotEmptyTest() { + + thrown.expect(AbortException) + thrown.expectMessage("'${emptyDir.getAbsolutePath()}' is empty.") + + FileUtils.validateDirectoryIsNotEmpty(emptyDir.getAbsolutePath()) + } + + @Test + void validateDirectoryIsNotEmptyTest() { + + FileUtils.validateDirectoryIsNotEmpty(notEmptyDir.getAbsolutePath()) + } +} diff --git a/test/groovy/MTABuildTest.groovy b/test/groovy/MTABuildTest.groovy new file mode 100644 index 000000000..9c20aa8a8 --- /dev/null +++ b/test/groovy/MTABuildTest.groovy @@ -0,0 +1,368 @@ +import hudson.AbortException +import org.jenkinsci.plugins.pipeline.utility.steps.shaded.org.yaml.snakeyaml.Yaml +import org.jenkinsci.plugins.pipeline.utility.steps.shaded.org.yaml.snakeyaml.parser.ParserException +import org.junit.Before +import org.junit.Rule +import org.junit.Test + +import com.lesfurets.jenkins.unit.BasePipelineTest +import org.junit.rules.ExpectedException +import org.junit.rules.TemporaryFolder + +import static com.lesfurets.jenkins.unit.global.lib.LibraryConfiguration.library + +import static ProjectSource.projectSource + +public class MTABuildTest extends BasePipelineTest { + + @Rule + public ExpectedException thrown = new ExpectedException() + + @Rule + public TemporaryFolder tmp = new TemporaryFolder() + + def shellCalls = [] + def echoes = [] + def currentDir + def otherDir + def pipeline + def mtaBuildShEnv + + + @Before + public void setup(){ + super.setUp() + + currentDir = tmp.newFolder().toURI().getPath()[0..-2] //omit final '/' + otherDir = tmp.newFolder().toURI().getPath()[0..-2] //omit final '/' + pipeline = "${tmp.newFolder("pipeline").toURI().getPath()}pipeline" + + def piperLib = library() + .name('piper-library-os') + .retriever(projectSource()) + .targetPath('clonePath/is/not/necessary') + .defaultVersion('') + .allowOverride(true) + .implicit(false) + .build() + helper.registerSharedLibrary(piperLib) + + helper.registerAllowedMethod('sh', [String], {s -> shellCalls.add(s)} ) + helper.registerAllowedMethod('echo', [String], {s -> echoes.add(s)} ) + helper.registerAllowedMethod('readYaml', [Map], { + m -> + return new Yaml().load((m.file as File).text) + }) + helper.registerAllowedMethod("dir", [String, Closure], { + s, c -> + currentDir = "${currentDir}/${s}" + c() + }) + helper.registerAllowedMethod('pwd', [], { currentDir } ) + helper.registerAllowedMethod("withEnv", [List.class, Closure.class], + { l, c -> + mtaBuildShEnv = l + c() + }) + helper.registerAllowedMethod('error', [String], { s -> throw new hudson.AbortException(s) }) + + binding.setVariable('PATH', '/usr/bin') + binding.setVariable('JAVA_HOME', '/opt/java') + binding.setVariable('env', [:]) + + } + + + @Test + public void straightForwardTest(){ + + binding.getVariable('env')['MTA_JAR_LOCATION'] = '/opt/mta' + + new File("${currentDir}/mta.yaml") << defaultMtaYaml() + + defaultPipeline() + def script = loadScript(pipeline) + def mtarFilePath = script.execute() + + assert shellCalls[0].startsWith('sed -ie \"s/\\\${timestamp}/`date +%Y%m%d%H%M%S`/g\" ') + assert shellCalls[0].endsWith('/mta.yaml') + + assert shellCalls[1].contains("PATH=./node_modules/.bin:/usr/bin") + + assert shellCalls[1].contains(' -jar /opt/mta/mta.jar --mtar ') + + assert mtarFilePath == "${currentDir}/com.mycompany.northwind.mtar" + + assert echoes[1] == "[mtaBuild] MTA JAR \"/opt/mta/mta.jar\" retrieved from environment." + } + + + @Test + public void mtarFilePathFromCommonPipelineEnviromentTest(){ + + binding.getVariable('env')['MTA_JAR_LOCATION'] = '/opt/mta' + + new File("${currentDir}/mta.yaml") << defaultMtaYaml() + + returnMtarFilePathFromCommonPipelineEnvironmentPipeline() + def script = loadScript(pipeline) + def mtarFilePath = script.execute() + + assert shellCalls[0].startsWith('sed -ie \"s/\\\${timestamp}/`date +%Y%m%d%H%M%S`/g\" ') + assert shellCalls[0].endsWith('/mta.yaml') + + assert shellCalls[1].contains("PATH=./node_modules/.bin:/usr/bin") + + assert shellCalls[1].contains(' -jar /opt/mta/mta.jar --mtar ') + + assert mtarFilePath == "${currentDir}/com.mycompany.northwind.mtar" + + assert echoes[1] == "[mtaBuild] MTA JAR \"/opt/mta/mta.jar\" retrieved from environment." + } + + + @Test + public void mtaBuildWithSurroundingDirTest(){ + + binding.getVariable('env')['MTA_JAR_LOCATION'] = '/opt/mta' + + def newDirName = 'newDir' + new File("${currentDir}/${newDirName}").mkdirs() + new File("${currentDir}/${newDirName}/mta.yaml") << defaultMtaYaml() + + withSurroundingDirPipeline() + def script = loadScript(pipeline) + def mtarFilePath = script.execute(newDirName) + + assert shellCalls[0].startsWith('sed -ie \"s/\\\${timestamp}/`date +%Y%m%d%H%M%S`/g\" ') + assert shellCalls[0].endsWith('/mta.yaml') + + assert shellCalls[1].contains("PATH=./node_modules/.bin:/usr/bin") + + assert shellCalls[1].contains(' -jar /opt/mta/mta.jar --mtar ') + + assert mtarFilePath == "${currentDir}/com.mycompany.northwind.mtar" + + assert echoes[1] == "[mtaBuild] MTA JAR \"/opt/mta/mta.jar\" retrieved from environment." + } + + @Test + void mtaHomeNotSetTest() { + + new File("${currentDir}/mta.yaml") << defaultMtaYaml() + + defaultPipeline() + def script = loadScript(pipeline) + def mtarFilePath = script.execute() + + assert shellCalls[0].startsWith('sed -ie \"s/\\\${timestamp}/`date +%Y%m%d%H%M%S`/g\" ') + assert shellCalls[0].endsWith('/mta.yaml') + + assert shellCalls[1].contains("PATH=./node_modules/.bin:/usr/bin") + + assert shellCalls[1].contains(' -jar mta.jar --mtar ') + + assert mtarFilePath == "${currentDir}/com.mycompany.northwind.mtar" + + assert echoes[1] == "[mtaBuild] Using MTA JAR from current working directory." + } + + + @Test + void mtaHomeAsParameterTest() { + + new File("${currentDir}/mta.yaml") << defaultMtaYaml() + + mtaJarLocationAsParameterPipeline() + def script = loadScript(pipeline) + def mtarFilePath = script.execute() + + assert shellCalls[0].startsWith('sed -ie \"s/\\\${timestamp}/`date +%Y%m%d%H%M%S`/g\" ') + assert shellCalls[0].endsWith('/mta.yaml') + + assert shellCalls[1].contains("PATH=./node_modules/.bin:/usr/bin") + + assert shellCalls[1].contains(' -jar /etc/mta/mta.jar --mtar ') + + assert mtarFilePath == "${currentDir}/com.mycompany.northwind.mtar" + + assert echoes[1] == "[mtaBuild] MTA JAR \"/etc/mta/mta.jar\" retrieved from parameters." + } + + + @Test + public void noMtaPresentTest(){ + thrown.expect(FileNotFoundException) + + defaultPipeline() + def script = loadScript(pipeline) + script.execute() + } + + + @Test + public void badMtaTest(){ + thrown.expect(ParserException) + thrown.expectMessage('while parsing a block mapping') + + new File("${currentDir}/mta.yaml") << badMtaYaml() + + defaultPipeline() + def script = loadScript(pipeline) + script.execute() + } + + + @Test + public void noIdInMtaTest(){ + thrown.expect(AbortException) + thrown.expectMessage("Property 'ID' not found in mta.yaml file at: '") + + new File("${currentDir}/mta.yaml") << noIdMtaYaml() + + defaultPipeline() + def script = loadScript(pipeline) + script.execute() + } + + + @Test + public void noBuildTargetTest(){ + thrown.expect(Exception) + thrown.expectMessage("ERROR - NO VALUE AVAILABLE FOR buildTarget") + + new File("${currentDir}/mta.yaml") << defaultMtaYaml() + + noBuildTargetPipeline() + def script = loadScript(pipeline) + script.execute() + } + + + private defaultPipeline(){ + new File(pipeline) << ''' + @Library('piper-library-os') + + execute(){ + mtaBuild buildTarget: 'NEO' + } + + return this + ''' + } + + private returnMtarFilePathFromCommonPipelineEnvironmentPipeline(){ + new File(pipeline) << ''' + @Library('piper-library-os') + + execute(){ + mtaBuild buildTarget: 'NEO' + return commonPipelineEnvironment.getMtarFilePath() + } + + return this + ''' + } + + private mtaJarLocationAsParameterPipeline(){ + new File(pipeline) << ''' + @Library('piper-library-os') + + execute(){ + mtaBuild mtaJarLocation: '/etc/mta', buildTarget: 'NEO' + } + + return this + ''' + } + + private withSurroundingDirPipeline(){ + new File(pipeline) << ''' + @Library('piper-library-os') + + execute(dirPath){ + dir("${dirPath}"){ + mtaBuild buildTarget: 'NEO' + } + } + + return this + ''' + } + + + private noBuildTargetPipeline(){ + new File(pipeline) << ''' + @Library('piper-library-os') + + execute(){ + mtaBuild() + } + + return this + ''' + } + + + private defaultMtaYaml(){ + return ''' + _schema-version: "2.0.0" + ID: "com.mycompany.northwind" + version: 1.0.0 + + parameters: + hcp-deployer-version: "1.0.0" + + modules: + - name: "fiorinorthwind" + type: html5 + path: . + parameters: + version: 1.0.0-${timestamp} + build-parameters: + builder: grunt + build-result: dist + ''' + } + + private badMtaYaml(){ + return ''' + _schema-version: "2.0.0 + ID: "com.mycompany.northwind" + version: 1.0.0 + + parameters: + hcp-deployer-version: "1.0.0" + + modules: + - name: "fiorinorthwind" + type: html5 + path: . + parameters: + version: 1.0.0-${timestamp} + build-parameters: + builder: grunt + build-result: dist + ''' + } + + private noIdMtaYaml(){ + return ''' + _schema-version: "2.0.0" + version: 1.0.0 + + parameters: + hcp-deployer-version: "1.0.0" + + modules: + - name: "fiorinorthwind" + type: html5 + path: . + parameters: + version: 1.0.0-${timestamp} + build-parameters: + builder: grunt + build-result: dist + ''' + } +} diff --git a/test/groovy/NeoDeploymentTest.groovy b/test/groovy/NeoDeploymentTest.groovy new file mode 100644 index 000000000..71fc3579d --- /dev/null +++ b/test/groovy/NeoDeploymentTest.groovy @@ -0,0 +1,309 @@ +import hudson.AbortException +import org.junit.rules.TemporaryFolder + +import static com.lesfurets.jenkins.unit.global.lib.LibraryConfiguration.library + +import static ProjectSource.projectSource + +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.rules.ExpectedException + +import com.lesfurets.jenkins.unit.BasePipelineTest + + +class NeoDeploymentTest extends BasePipelineTest { + + @Rule + public ExpectedException thrown = new ExpectedException().none() + + @Rule + public TemporaryFolder tmp = new TemporaryFolder() + + def script + + def shellCalls = [] + + def pipeline + def echoes = [] + def archivePath + + @Before + void setup() { + + super.setUp() + + archivePath = "${tmp.newFolder("workspace").toURI().getPath()}archiveName.mtar" + pipeline = "${tmp.newFolder("pipeline").toURI().getPath()}pipeline" + + def piperLib = library() + .name('piper-library-os') + .retriever(projectSource()) + .targetPath('clonePath/is/not/necessary') + .defaultVersion('irrelevant') + .allowOverride(true) + .implicit(false) + .build() + helper.registerSharedLibrary(piperLib) + + helper.registerAllowedMethod('sh', [String], { GString s -> + shellCalls.add(s.replaceAll(/\s+/, " ").trim()) + }) + helper.registerAllowedMethod('error', [String], { s -> throw new AbortException(s) }) + helper.registerAllowedMethod('echo', [String], { s -> echoes.add(s) }) + helper.registerAllowedMethod('usernamePassword', [Map], { m -> return m }) + helper.registerAllowedMethod('withCredentials', [List, Closure], { l, c -> + if(l[0].credentialsId == 'myCredentialsId') { + binding.setProperty('username', 'anonymous') + binding.setProperty('password', '********') + } else if(l[0].credentialsId == 'CI_CREDENTIALS_ID') { + binding.setProperty('username', 'defaultUser') + binding.setProperty('password', '********') + } + try { + c() + } finally { + binding.setProperty('username', null) + binding.setProperty('password', null) + } + + }) + + binding.setVariable('env', [:]) + + } + + + @Test + void straightForwardTest() { + + defaultPipeline() + + binding.getVariable('env')['NEO_HOME'] = '/opt/neo' + + new File(archivePath) << "dummy archive" + + script = loadScript(pipeline) + + script.execute(archivePath, 'myCredentialsId') + + assert shellCalls[0] =~ /#!\/bin\/bash \/opt\/neo\/tools\/neo\.sh deploy-mta --user anonymous --host test\.deploy\.host\.com --source .* --account trialuser123 --password \*\*\*\*\*\*\*\* --synchronous/ + + assert echoes[1] == "[neoDeploy] Neo executable \"/opt/neo/tools/neo.sh\" retrieved from environment." + + } + + + @Test + void badCredentialsIdTest() { + + defaultPipeline() + + binding.getVariable('env')['NEO_HOME'] = '/opt/neo' + + new File(archivePath) << "dummy archive" + + thrown.expect(MissingPropertyException) + + script = loadScript(pipeline) + + script.execute(archivePath, 'badCredentialsId') + + } + + + @Test + void credentialsIdNotProvidedTest() { + + noCredentialsIdPipeline() + + binding.getVariable('env')['NEO_HOME'] = '/opt/neo' + + new File(archivePath) << "dummy archive" + + script = loadScript(pipeline) + + script.execute(archivePath) + + assert shellCalls[0] =~ /#!\/bin\/bash \/opt\/neo\/tools\/neo\.sh deploy-mta --user defaultUser --host test\.deploy\.host\.com --source .* --account trialuser123 --password \*\*\*\*\*\*\*\* --synchronous/ + + assert echoes[1] == "[neoDeploy] Neo executable \"/opt/neo/tools/neo.sh\" retrieved from environment." + } + + + @Test + void neoHomeNotSetTest() { + + noCredentialsIdPipeline() + + new File(archivePath) << "dummy archive" + + script = loadScript(pipeline) + + script.execute(archivePath) + + assert shellCalls[0] =~ /#!\/bin\/bash neo deploy-mta --user defaultUser --host test\.deploy\.host\.com --source .* --account trialuser123 --password \*\*\*\*\*\*\*\* --synchronous/ + + assert echoes[1] == "Using Neo executable from PATH." + } + + + @Test + void neoHomeAsParameterTest() { + + neoHomeParameterPipeline() + + new File(archivePath) << "dummy archive" + + script = loadScript(pipeline) + + script.execute(archivePath, 'myCredentialsId') + + assert shellCalls[0] =~ /#!\/bin\/bash \/etc\/neo\/tools\/neo\.sh deploy-mta --user anonymous --host test\.deploy\.host\.com --source .* --account trialuser123 --password \*\*\*\*\*\*\*\* --synchronous/ + + assert echoes[1] == "[neoDeploy] Neo executable \"/etc/neo/tools/neo.sh\" retrieved from parameters." + + } + + + @Test + void archiveNotProvidedTest() { + + noArchivePathPipeline() + + thrown.expect(Exception) + thrown.expectMessage('ERROR - NO VALUE AVAILABLE FOR archivePath') + + script = loadScript(pipeline) + + script.execute() + + } + + + @Test + void wrongArchivePathProvidedTest() { + + defaultPipeline() + + thrown.expect(AbortException) + thrown.expectMessage("Archive cannot be found with parameter archivePath: '") + + script = loadScript(pipeline) + + script.execute(archivePath, 'myCredentialsId') + + } + + + @Test + void scriptNotProvidedTest() { + + noScriptPipeline() + + new File(archivePath) << "dummy archive" + + thrown.expect(Exception) + thrown.expectMessage('ERROR - NO VALUE AVAILABLE FOR deployHost') + + script = loadScript(pipeline) + + script.execute(archivePath) + + } + + + private defaultPipeline(){ + new File(pipeline) << """ + @Library('piper-library-os') + + execute(archivePath, neoCredentialsId) { + + commonPipelineEnvironment.setConfigProperty('DEPLOY_HOST', 'test.deploy.host.com') + commonPipelineEnvironment.setConfigProperty('CI_DEPLOY_ACCOUNT', 'trialuser123') + + node() { + neoDeploy script: this, archivePath: archivePath, neoCredentialsId: neoCredentialsId + } + + } + + return this + """ + } + + private noCredentialsIdPipeline(){ + new File(pipeline) << """ + @Library('piper-library-os') + + execute(archivePath) { + + commonPipelineEnvironment.setConfigProperty('DEPLOY_HOST', 'test.deploy.host.com') + commonPipelineEnvironment.setConfigProperty('CI_DEPLOY_ACCOUNT', 'trialuser123') + + node() { + neoDeploy script: this, archivePath: archivePath + } + + } + + return this + """ + } + + private neoHomeParameterPipeline(){ + new File(pipeline) << """ + @Library('piper-library-os') + + execute(archivePath, neoCredentialsId) { + + commonPipelineEnvironment.setConfigProperty('DEPLOY_HOST', 'test.deploy.host.com') + commonPipelineEnvironment.setConfigProperty('CI_DEPLOY_ACCOUNT', 'trialuser123') + + node() { + neoDeploy script: this, archivePath: archivePath, neoCredentialsId: neoCredentialsId, neoHome: '/etc/neo' + } + + } + + return this + """ + } + + private noArchivePathPipeline(){ + new File(pipeline) << """ + @Library('piper-library-os') + + execute() { + + commonPipelineEnvironment.setConfigProperty('DEPLOY_HOST', 'test.deploy.host.com') + commonPipelineEnvironment.setConfigProperty('CI_DEPLOY_ACCOUNT', 'trialuser123') + + node() { + neoDeploy script: this + } + + } + + return this + """ + } + + private noScriptPipeline(){ + new File(pipeline) << """ + @Library('piper-library-os') + + execute(archivePath) { + + node() { + neoDeploy archivePath: archivePath + } + + } + + return this + """ + } + +} diff --git a/test/groovy/ProjectSource.groovy b/test/groovy/ProjectSource.groovy new file mode 100644 index 000000000..f524283ab --- /dev/null +++ b/test/groovy/ProjectSource.groovy @@ -0,0 +1,39 @@ +import com.lesfurets.jenkins.unit.global.lib.SourceRetriever + +import groovy.transform.CompileStatic +import groovy.transform.Immutable + +/** + * Retrieves the shared lib sources of the current project which are expected to be + * at the default location "./vars". + */ + +@Immutable +@CompileStatic +class ProjectSource implements SourceRetriever { + + String sourceURL + + /* + * None of the parameters provided in the signature are used in the use-case of that retriever. + */ + @Override + List retrieve(String repository, String branch, String targetPath) { + def sourceDir = new File(sourceURL) + if (sourceDir.exists()) { + return [sourceDir.getAbsoluteFile().toURI().toURL()] + } + throw new IllegalStateException("Directory $sourceDir.path does not exists") + } + + static ProjectSource projectSource(String sourceDir = '.') { + new ProjectSource(sourceDir) + } + + @Override + String toString() { + return "${getClass().getSimpleName()}{" + + "sourceURL='" + sourceURL + '\'' + + '}' + } +} diff --git a/test/groovy/ToolValidateTest.groovy b/test/groovy/ToolValidateTest.groovy new file mode 100644 index 000000000..5df3a341c --- /dev/null +++ b/test/groovy/ToolValidateTest.groovy @@ -0,0 +1,326 @@ +import static com.lesfurets.jenkins.unit.global.lib.LibraryConfiguration.library +import static ProjectSource.projectSource + +import org.apache.commons.exec.* +import hudson.AbortException +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.rules.ExpectedException +import org.junit.rules.TemporaryFolder +import com.lesfurets.jenkins.unit.BasePipelineTest + + +class ToolValidateTest extends BasePipelineTest { + + + @Rule + public ExpectedException thrown = new ExpectedException().none() + + @Rule + public TemporaryFolder tmp = new TemporaryFolder() + + private notEmptyDir + private messages = [] + private script + + + @Before + void setup() { + + super.setUp() + + def piperLib = library() + .name('piper-library-os') + .retriever(projectSource()) + .targetPath('clonePath/is/not/necessary') + .defaultVersion('irrelevant') + .allowOverride(true) + .implicit(false) + .build() + + helper.registerSharedLibrary(piperLib) + + helper.registerAllowedMethod('echo', [String], {s -> messages.add(s)}) + + def pipelinePath = "${tmp.newFolder("pipeline").toURI().getPath()}pipeline" + createPipeline(pipelinePath) + script = loadScript(pipelinePath) + + notEmptyDir = tmp.newFolder('notEmptyDir') + def path = "${notEmptyDir.getAbsolutePath()}${File.separator}test.txt" + File file = new File(path) + file.createNewFile() + + binding.setVariable('JAVA_HOME', notEmptyDir.getAbsolutePath()) + + binding.setVariable('home', notEmptyDir.getAbsolutePath()) + + } + + + @Test + void nullHomeTest() { + + thrown.expect(IllegalArgumentException) + thrown.expectMessage("The parameter 'home' can not be null or empty.") + + binding.setVariable('tool', 'java') + binding.setVariable('home', null) + + script.execute() + } + + @Test + void emptyHomeTest() { + + thrown.expect(IllegalArgumentException) + thrown.expectMessage("The parameter 'home' can not be null or empty.") + + binding.setVariable('tool', 'java') + binding.setVariable('home', '') + + script.execute() + } + + @Test + void nullToolTest() { + + thrown.expect(IllegalArgumentException) + thrown.expectMessage("The parameter 'tool' can not be null or empty.") + + binding.setVariable('tool', null) + + script.execute() + } + + @Test + void emptyToolTest() { + + thrown.expect(IllegalArgumentException) + thrown.expectMessage("The parameter 'tool' can not be null or empty.") + + binding.setVariable('tool', '') + + script.execute() + } + + @Test + void invalidToolTest() { + + thrown.expect(AbortException) + thrown.expectMessage("The tool 'test' is not supported.") + + binding.setVariable('tool', 'test') + + script.execute() + } + + @Test + void unableToValidateJavaTest() { + + thrown.expect(AbortException) + thrown.expectMessage('The validation of Java failed.') + + helper.registerAllowedMethod('sh', [Map], { Map m -> getNoVersion(m) }) + binding.setVariable('tool', 'java') + + script.execute() + } + + @Test + void unableToValidateMtaTest() { + + thrown.expect(AbortException) + thrown.expectMessage('The validation of SAP Multitarget Application Archive Builder failed.') + + helper.registerAllowedMethod('sh', [Map], { Map m -> getNoVersion(m) }) + binding.setVariable('tool', 'mta') + + script.execute() + } + + @Test + void unableToValidateNeoTest() { + + thrown.expect(AbortException) + thrown.expectMessage('The validation of SAP Cloud Platform Console Client failed.') + + helper.registerAllowedMethod('sh', [Map], { Map m -> getNoVersion(m) }) + binding.setVariable('tool', 'neo') + + script.execute() + } + + @Test + void unableToValidateCmTest() { + + thrown.expect(AbortException) + thrown.expectMessage('The validation of Change Management Command Line Interface failed.') + + helper.registerAllowedMethod('sh', [Map], { Map m -> getNoVersion(m) }) + binding.setVariable('tool', 'cm') + + script.execute() + } + + @Test + void validateIncompatibleVersionJavaTest() { + + thrown.expect(AbortException) + thrown.expectMessage('The installed version of Java is 1.7.0.') + + helper.registerAllowedMethod('sh', [Map], { Map m -> getIncompatibleVersion(m) }) + binding.setVariable('tool', 'java') + + script.execute() + } + + @Test + void validateIncompatibleVersionMtaTest() { + + thrown.expect(AbortException) + thrown.expectMessage('The installed version of SAP Multitarget Application Archive Builder is 1.0.5.') + + helper.registerAllowedMethod('sh', [Map], { Map m -> getIncompatibleVersion(m) }) + binding.setVariable('tool', 'mta') + + script.execute() + } + + @Test + void validateNeoIncompatibleVersionTest() { + + thrown.expect(AbortException) + thrown.expectMessage('The installed version of SAP Cloud Platform Console Client is 1.126.51.') + + helper.registerAllowedMethod('sh', [Map], { Map m -> getIncompatibleVersion(m) }) + binding.setVariable('tool', 'neo') + + script.execute() + } + + @Test + void validateCmIncompatibleVersionTest() { + + thrown.expect(AbortException) + thrown.expectMessage('The installed version of Change Management Command Line Interface is 0.0.0.') + + helper.registerAllowedMethod('sh', [Map], { Map m -> getIncompatibleVersion(m) }) + binding.setVariable('tool', 'cm') + + script.execute() + } + + @Test + void validateJavaTest() { + + helper.registerAllowedMethod('sh', [Map], { Map m -> getVersion(m) }) + binding.setVariable('tool', 'java') + + script.execute() + + assert messages[0].contains('--- BEGIN LIBRARY STEP: toolValidate.groovy ---') + assert messages[1].contains('[INFO] Validating Java version 1.8.0 or compatible version.') + assert messages[2].contains('[INFO] Java version 1.8.0 is installed.') + assert messages[3].contains('--- END LIBRARY STEP: toolValidate.groovy ---') + } + + @Test + void validateMtaTest() { + + helper.registerAllowedMethod('sh', [Map], { Map m -> getVersion(m) }) + binding.setVariable('tool', 'mta') + + script.execute() + + assert messages[0].contains('--- BEGIN LIBRARY STEP: toolValidate.groovy ---') + assert messages[1].contains('[INFO] Validating SAP Multitarget Application Archive Builder version 1.0.6 or compatible version.') + assert messages[2].contains('[INFO] SAP Multitarget Application Archive Builder version 1.0.6 is installed.') + assert messages[3].contains('--- END LIBRARY STEP: toolValidate.groovy ---') + } + + @Test + void validateNeoTest() { + + helper.registerAllowedMethod('sh', [Map], { Map m -> getVersion(m) }) + binding.setVariable('tool', 'neo') + + script.execute() + + assert messages[0].contains('--- BEGIN LIBRARY STEP: toolValidate.groovy ---') + assert messages[1].contains('[INFO] Validating SAP Cloud Platform Console Client version 3.39.10 or compatible version.') + assert messages[2].contains('[INFO] SAP Cloud Platform Console Client version 3.39.10 is installed.') + assert messages[3].contains('--- END LIBRARY STEP: toolValidate.groovy ---') + } + + @Test + void validateCmTest() { + + helper.registerAllowedMethod('sh', [Map], { Map m -> getVersion(m) }) + binding.setVariable('tool', 'cm') + + script.execute() + + assert messages[0].contains('--- BEGIN LIBRARY STEP: toolValidate.groovy ---') + assert messages[1].contains('[INFO] Validating Change Management Command Line Interface version 0.0.1 or compatible version.') + assert messages[2].contains('[INFO] Change Management Command Line Interface version 0.0.1 is installed.') + assert messages[3].contains('--- END LIBRARY STEP: toolValidate.groovy ---') + } + + + private createPipeline(pipelinePath){ + new File(pipelinePath) << """ + @Library('piper-library-os') + + execute() { + + node() { + + toolValidate tool: tool, home: home + } + } + + return this + """ + } + + private getNoVersion(Map m) { + throw new AbortException('script returned exit code 127') + } + + private getVersion(Map m) { + + if(m.script.contains('java -version')) { + return '''openjdk version \"1.8.0_121\" + OpenJDK Runtime Environment (build 1.8.0_121-8u121-b13-1~bpo8+1-b13) + OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)''' + } else if(m.script.contains('mta.jar -v')) { + return '1.0.6' + } else if(m.script.contains('neo.sh version')) { + return '''SAP Cloud Platform Console Client + SDK version : 3.39.10 + Runtime : neo-java-web''' + } else if(m.script.contains('cmclient -v')) { + return '0.0.1-beta-2 : fc9729964a6acf5c1cad9c6f9cd6469727625a8e' + } + } + + private getIncompatibleVersion(Map m) { + + if(m.script.contains('java -version')) { + return '''openjdk version \"1.7.0_121\" + OpenJDK Runtime Environment (build 1.7.0_121-8u121-b13-1~bpo8+1-b13) + OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode)''' + } else if(m.script.contains('mta.jar -v')) { + return '1.0.5' + } else if(m.script.contains('neo.sh version')) { + return '''SAP Cloud Platform Console Client + SDK version : 1.126.51 + Runtime : neo-java-web''' + } else if(m.script.contains('cmclient -v')) { + return '0.0.0-beta-1 : fc9729964a6acf5c1cad9c6f9cd6469727625a8e' + } + } +} + diff --git a/test/groovy/VersionTest.groovy b/test/groovy/VersionTest.groovy new file mode 100644 index 000000000..39679843e --- /dev/null +++ b/test/groovy/VersionTest.groovy @@ -0,0 +1,192 @@ +import org.junit.Rule +import org.junit.Before +import org.junit.Test +import org.junit.rules.ExpectedException + +import hudson.AbortException + +import com.sap.piper.Version + + +class VersionTest { + + + @Rule + public ExpectedException thrown = new ExpectedException().none() + + + @Test + void illegalMajorVersionTest() { + + thrown.expect(IllegalArgumentException) + thrown.expectMessage("The parameter 'major' can not have a value less than 0.") + + Version version = new Version(-1,0) + } + + @Test + void illegalMinorVersionTest() { + + thrown.expect(IllegalArgumentException) + thrown.expectMessage("The parameter 'minor' can not have a value less than 0.") + + Version version = new Version(0,-1) + } + + @Test + void nullMajorVersionTest() { + + thrown.expect(IllegalArgumentException) + thrown.expectMessage("The parameter 'major' can not have a value less than 0.") + + Version version = new Version(null,0) + } + + @Test + void nullMinorVersionTest() { + + thrown.expect(IllegalArgumentException) + thrown.expectMessage("The parameter 'minor' can not have a value less than 0.") + + Version version = new Version(0, null) + } + + @Test + void nullVersionTest() { + + thrown.expect(IllegalArgumentException) + thrown.expectMessage("The parameter 'text' can not be null or empty.") + + Version version = new Version(null) + } + + @Test + void emptyVersionTest() { + + thrown.expect(IllegalArgumentException) + thrown.expectMessage("The parameter 'text' can not be null or empty.") + + Version version = new Version('') + } + + @Test + void unexpectedFormatTest() { + + thrown.expect(AbortException) + thrown.expectMessage("The version '0-0.1' has an unexpected format. The expected format is .") + + Version version = new Version('0-0.1') + } + + @Test + void isEqualNullTest() { + + thrown.expect(IllegalArgumentException) + thrown.expectMessage("The parameter 'version' can not be null.") + + Version version = new Version(0,0,1) + version.equals(null) + } + + @Test + void isEqualPatchTest() { + + Version version1 = new Version(0,0,1) + Version version2 = new Version('0.0.1') + + assert version1.equals(version2) + } + + @Test + void isEqualMinorTest() { + + Version version1 = new Version(0,1,0) + Version version2 = new Version('0.1.0') + + assert version1.equals(version2) + } + + @Test + void isEqualMajorTest() { + + Version version1 = new Version(1,0,0) + Version version2 = new Version('1.0.0') + + assert version1.equals(version2) + } + + @Test + void isHigherNullTest() { + + thrown.expect(IllegalArgumentException) + thrown.expectMessage("The parameter 'version' can not be null.") + + Version version = new Version(0,0,1) + version.isHigher(null) + } + + @Test + void isHigherPatchTest() { + + Version version1 = new Version(0,0,1) + Version version2 = new Version('0.0.2') + + assert version2.isHigher(version1) + } + + @Test + void isHigherMinorTest() { + + Version version1 = new Version(0,1,0) + Version version2 = new Version('0.2.0') + + assert version2.isHigher(version1) + } + + @Test + void isHigherMajorTest() { + + Version version1 = new Version(1,0,0) + Version version2 = new Version('2.0.0') + + assert version2.isHigher(version1) + } + + @Test + void isCompatibleVersionNullTest() { + + thrown.expect(IllegalArgumentException) + thrown.expectMessage("The parameter 'version' can not be null.") + + Version version = new Version(0,0,1) + version.isCompatibleVersion(null) + } + + @Test + void isCompatibleVersionPatchTest() { + + Version version1 = new Version(0,0,1) + Version version2 = new Version('0.0.2') + + assert version2.isCompatibleVersion(version1) + } + + @Test + void isCompatibleVersionMinorTest() { + + Version version1 = new Version(0,1,0) + Version version2 = new Version('0.2.0') + + assert version2.isCompatibleVersion(version1) + } + + @Test + void isIncompatibleVersionTest() { + + Version version1 = new Version(1,0,0) + Version version2 = new Version('2.0.0') + + assert !version2.isCompatibleVersion(version1) + } +} + diff --git a/test/java/AbstractJenkinsTest.java b/test/java/AbstractJenkinsTest.java new file mode 100644 index 000000000..06977fafe --- /dev/null +++ b/test/java/AbstractJenkinsTest.java @@ -0,0 +1,39 @@ +import java.io.File; +import java.io.IOException; +import javax.inject.Inject; +import jenkins.model.Jenkins; +import org.apache.commons.io.FileUtils; +import org.jenkinsci.plugins.workflow.cps.global.UserDefinedGlobalVariableList; +import org.jenkinsci.plugins.workflow.cps.global.WorkflowLibRepository; +import org.junit.ClassRule; +import org.junit.Rule; +import org.jvnet.hudson.test.BuildWatcher; +import org.jvnet.hudson.test.RestartableJenkinsRule; + +public class AbstractJenkinsTest { + @ClassRule + public static BuildWatcher buildWatcher = new BuildWatcher(); + @Rule + public RestartableJenkinsRule story = new RestartableJenkinsRule(); + @Inject + protected Jenkins jenkins; + @Inject + WorkflowLibRepository repo; + @Inject + protected UserDefinedGlobalVariableList uvl; + + public AbstractJenkinsTest() { + super(); + } + + protected void copyLibrarySources() { + try { + FileUtils.copyDirectory(new File("vars"), new File(repo.workspace, "vars")); + FileUtils.copyDirectory(new File("src"), new File(repo.workspace, "src")); + FileUtils.copyDirectory(new File("resources"), new File(repo.workspace, "resources")); + } catch (IOException e) { + e.printStackTrace(); + System.exit(1); + } + } +} diff --git a/test/java/AcmeTest.java b/test/java/AcmeTest.java new file mode 100644 index 000000000..558b86c5b --- /dev/null +++ b/test/java/AcmeTest.java @@ -0,0 +1,91 @@ +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang.StringUtils; +import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition; +import org.jenkinsci.plugins.workflow.cps.global.UserDefinedGlobalVariable; +import org.jenkinsci.plugins.workflow.job.WorkflowJob; +import org.jenkinsci.plugins.workflow.job.WorkflowRun; +import org.junit.Test; +import org.junit.runners.model.Statement; + +import java.io.File; +import java.util.Arrays; + + +public class AcmeTest extends AbstractJenkinsTest { + + /** + * Test acme getter and setter + */ + @Test + public void acmeTest() throws Exception { + story.addStep(new Statement() { + @Override public void evaluate() throws Throwable { + //File vars = new File(repo.workspace, UserDefinedGlobalVariable.PREFIX); + File vars = new File(repo.workspace, "vars"); + vars.mkdirs(); + FileUtils.writeStringToFile(new File(vars, "acme.groovy"), StringUtils.join(Arrays.asList( + "class acme implements Serializable {", + " private String name = 'initial'", + " def setName(value) {", + " this.name = value", + " }", + " def getName() {", + " this.name", + " }", + " def caution(message) {", + " echo \"Hello, ${name}! CAUTION: ${message}\"", + " }", + "}") + , "\n")); + + // simulate the effect of push + uvl.rebuild(); + + WorkflowJob p = jenkins.createProject(WorkflowJob.class, "p"); + + p.setDefinition(new CpsFlowDefinition( + "node {\n" + + + "acme.setName('acmeName')\n"+ + "echo acme.getName()\n" + + + "}", + true)); + + // build this workflow + WorkflowRun b = story.j.assertBuildStatusSuccess(p.scheduleBuild2(0)); + + story.j.assertLogContains("acmeName", b); + } + }); + } + + //@Test + public void acmeTest2() throws Exception { + story.addStep(new Statement() { + @Override + public void evaluate() throws Throwable { + + copyLibrarySources(); + // simulate the effect of push + uvl.rebuild(); + + WorkflowJob p = jenkins.createProject(WorkflowJob.class, "p"); + + p.setDefinition(new CpsFlowDefinition( + "import com.sap.piper.Utils\n" + + "node {\n" + + + "acme.setName('myName')\n"+ + "assert acme.getName() == 'myName'\n" + + + + "}", + true)); + + // build this workflow + WorkflowRun b = story.j.assertBuildStatusSuccess(p.scheduleBuild2(0)); + } + }); + } + } diff --git a/test/java/_TemplateTest.java b/test/java/_TemplateTest.java new file mode 100644 index 000000000..1555b8a78 --- /dev/null +++ b/test/java/_TemplateTest.java @@ -0,0 +1,40 @@ +import java.io.File; +import org.apache.commons.io.FileUtils; +import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition; +import org.jenkinsci.plugins.workflow.job.WorkflowJob; +import org.jenkinsci.plugins.workflow.job.WorkflowRun; +import org.junit.runners.model.Statement; + +public class _TemplateTest extends AbstractJenkinsTest { + /** + * Test ... step + */ + //@Test + public void testWhatEver() throws Exception { + story.addStep(new Statement() { + @Override + public void evaluate() throws Throwable { + copyLibrarySources(); + // simulate the effect of push + uvl.rebuild(); + WorkflowJob p = jenkins.createProject(WorkflowJob.class, "p"); + //copy test resources into workspace + FileUtils.copyDirectory(new File("test/resources"), new File(jenkins.getWorkspaceFor(p).getRemote(), "resources")); + + p.setDefinition(new CpsFlowDefinition( + "node {\n" + + + "\n" + + "\n" + + + "}", + true) + ); + + // build this workflow + WorkflowRun b = story.j.assertBuildStatusSuccess(p.scheduleBuild2(0)); + //story.j.assertLogContains("this is part of the log", b); + } + }); + } + } \ No newline at end of file diff --git a/vars/commonPipelineEnvironment.groovy b/vars/commonPipelineEnvironment.groovy new file mode 100644 index 000000000..8e214270e --- /dev/null +++ b/vars/commonPipelineEnvironment.groovy @@ -0,0 +1,27 @@ +class commonPipelineEnvironment implements Serializable { + private Map configProperties = [:] + + private String mtarFilePath + + def setConfigProperties(map) { + configProperties = map + } + def getConfigProperties() { + return configProperties + } + def setConfigProperty(property, value) { + configProperties[property] = value + } + def getConfigProperty(property) { + if (configProperties[property] != null) + return configProperties[property].trim() + else + return configProperties[property] + } + def getMtarFilePath() { + return mtarFilePath + } + void setMtarFilePath(mtarFilePath) { + this.mtarFilePath = mtarFilePath + } +} diff --git a/vars/handlePipelineStepErrors.groovy b/vars/handlePipelineStepErrors.groovy new file mode 100644 index 000000000..6fb962a03 --- /dev/null +++ b/vars/handlePipelineStepErrors.groovy @@ -0,0 +1,44 @@ +def call(Map parameters = [:], body) { + + def stepParameters = parameters.stepParameters //mandatory + def stepName = parameters.stepName //mandatory + def echoDetails = parameters.get('echoDetails', true) + + try { + + if (stepParameters == null && stepName == null) + error "step handlePipelineStepErrors requires following mandatory parameters: stepParameters, stepName" + + if (echoDetails) + echo "--- BEGIN LIBRARY STEP: ${stepName}.groovy ---" + + body() + + } catch (Throwable err) { + if (echoDetails) + echo """---------------------------------------------------------- +--- ERROR OCCURED IN LIBRARY STEP: ${stepName} +---------------------------------------------------------- + +FOLLOWING PARAMETERS WERE AVAILABLE TO THIS STEP: +*** +${stepParameters} +*** + +ERROR WAS: +*** +${err} +*** + +FURTHER INFORMATION: +* Documentation of step ${stepName}: .../${stepName}/ +* Pipeline documentation: https://... +* GitHub repository for pipeline steps: https://... + +----------------------------------------------------------""" + throw err + } finally { + if (echoDetails) + echo "--- END LIBRARY STEP: ${stepName}.groovy ---" + } +} diff --git a/vars/mtaBuild.groovy b/vars/mtaBuild.groovy new file mode 100644 index 000000000..7e9aff071 --- /dev/null +++ b/vars/mtaBuild.groovy @@ -0,0 +1,63 @@ +import com.sap.piper.Utils + +/** + * mtaBuild + * Builds Fiori app with Multitarget Archiver + * Prerequisite: InitializeNpm needs to be called beforehand + * + */ +def call(Map parameters = [:]) { + + handlePipelineStepErrors (stepName: 'mtaBuild', stepParameters: parameters) { + + def utils = new Utils() + def buildTarget = utils.getMandatoryParameter(parameters, 'buildTarget', null) + def script = parameters.script + if (script == null){ + script = [commonPipelineEnvironment: commonPipelineEnvironment] + } + + def mtaYaml = readYaml file: "${pwd()}/mta.yaml" + + //[Q]: Why not yaml.dump()? [A]: This reformats the whole file. + sh "sed -ie \"s/\\\${timestamp}/`date +%Y%m%d%H%M%S`/g\" ${pwd()}/mta.yaml" + + def id = mtaYaml.ID + if (!id) { + error "Property 'ID' not found in mta.yaml file at: '${pwd()}'" + } + + def mtarFileName = "${id}.mtar" + + def mtaJar = getMtaJar(parameters) + + sh """#!/bin/bash + export PATH=./node_modules/.bin:${PATH} + java -jar ${mtaJar} --mtar ${mtarFileName} --build-target=${buildTarget} build + """ + + def mtarFilePath = "${pwd()}/${mtarFileName}" + script.commonPipelineEnvironment.setMtarFilePath(mtarFilePath) + + return mtarFilePath + } +} + +private getMtaJar(parameters) { + def mtaJarLocation = 'mta.jar' //default, maybe it is in current working directory + + if(parameters?.mtaJarLocation){ + mtaJarLocation = "${parameters.mtaJarLocation}/mta.jar" + echo "[mtaBuild] MTA JAR \"${mtaJarLocation}\" retrieved from parameters." + return mtaJarLocation + } + + if(env?.MTA_JAR_LOCATION){ + mtaJarLocation = "${env.MTA_JAR_LOCATION}/mta.jar" + echo "[mtaBuild] MTA JAR \"${mtaJarLocation}\" retrieved from environment." + return mtaJarLocation + } + + echo "[mtaBuild] Using MTA JAR from current working directory." + return mtaJarLocation +} diff --git a/vars/neoDeploy.groovy b/vars/neoDeploy.groovy new file mode 100644 index 000000000..139d84b90 --- /dev/null +++ b/vars/neoDeploy.groovy @@ -0,0 +1,78 @@ +/** + * neoDeployment + * Deploys file to Neo + * Prerequisite: Location of file to be deployed as 'archivePath' parameter + * Needs to be surrounded by withCredentials closure to provide username and password + * + * @param archivePath Path of the archive to be deployed. + */ +import com.sap.piper.Utils + +def call(parameters = [:]) { + + handlePipelineStepErrors (stepName: 'neoDeploy', stepParameters: parameters) { + + def utils = new Utils() + def script = parameters.script + if (script == null){ + script = [commonPipelineEnvironment: commonPipelineEnvironment] + } + + def archivePath = new File(utils.getMandatoryParameter(parameters, 'archivePath', null)) + if (!archivePath.isAbsolute()) { + archivePath = new File(pwd(), archivePath.getPath()) + } + if (!archivePath.exists()){ + error "Archive cannot be found with parameter archivePath: '${archivePath}'." + } + + def defaultDeployHost = script.commonPipelineEnvironment.getConfigProperty('DEPLOY_HOST') + def defaultDeployAccount = script.commonPipelineEnvironment.getConfigProperty('CI_DEPLOY_ACCOUNT') + def defaultCredentialsId = script.commonPipelineEnvironment.getConfigProperty('neoCredentialsId') + if (defaultCredentialsId == null) { + defaultCredentialsId = 'CI_CREDENTIALS_ID' + } + + def deployHost = utils.getMandatoryParameter(parameters, 'deployHost', defaultDeployHost) + def deployAccount = utils.getMandatoryParameter(parameters, 'deployAccount', defaultDeployAccount) + def credentialsId = parameters.get('neoCredentialsId', defaultCredentialsId) + + def neoExecutable = getNeoExecutable(parameters) + + withCredentials([usernamePassword( + credentialsId: credentialsId, + passwordVariable: 'password', + usernameVariable: 'username' + )]) { + sh """#!/bin/bash + ${neoExecutable} deploy-mta \ + --user ${username} \ + --host ${deployHost} \ + --source ${archivePath.getAbsolutePath()} \ + --account ${deployAccount} \ + --password ${password} \ + --synchronous + """ + } + } +} + +private getNeoExecutable(parameters) { + + def neoExecutable = 'neo' // default, if nothing below applies maybe it is the path. + + if (parameters?.neoHome) { + neoExecutable = "${parameters.neoHome}/tools/neo.sh" + echo "[neoDeploy] Neo executable \"${neoExecutable}\" retrieved from parameters." + return neoExecutable + } + + if (env?.NEO_HOME) { + neoExecutable = "${env.NEO_HOME}/tools/neo.sh" + echo "[neoDeploy] Neo executable \"${neoExecutable}\" retrieved from environment." + return neoExecutable + } + + echo "Using Neo executable from PATH." + return neoExecutable +} diff --git a/vars/setupCommonPipelineEnvironment.groovy b/vars/setupCommonPipelineEnvironment.groovy new file mode 100644 index 000000000..ee30ef0e1 --- /dev/null +++ b/vars/setupCommonPipelineEnvironment.groovy @@ -0,0 +1,14 @@ +def call(Map parameters = [:]) { + + handlePipelineStepErrors (stepName: 'setupCommonPipelineEnvironment', stepParameters: parameters) { + + def configFile = parameters.get('configFile', '.pipeline/config.properties') + def script = parameters.script + + Map configMap = [:] + if (configFile.length() > 0) + configMap = readProperties (file: configFile) + script.commonPipelineEnvironment.setConfigProperties(configMap) + + } +} diff --git a/vars/toolValidate.groovy b/vars/toolValidate.groovy new file mode 100644 index 000000000..a640d3722 --- /dev/null +++ b/vars/toolValidate.groovy @@ -0,0 +1,74 @@ +import com.sap.piper.FileUtils +import com.sap.piper.Version +import hudson.AbortException + +/** + * toolValidate: validates if a tool is installed with the expected version. + * + * @param tool + * the tool to validate: java, mta, neo or cm. + * @param home + * the directory containing the tool. + */ +def call(Map parameters = [:]) { + + handlePipelineStepErrors (stepName: 'toolValidate', stepParameters: parameters) { + + def tool = parameters.tool + def home = parameters.home + + if (!tool) throw new IllegalArgumentException("The parameter 'tool' can not be null or empty.") + if (!home) throw new IllegalArgumentException("The parameter 'home' can not be null or empty.") + + FileUtils.validateDirectoryIsNotEmpty(home) + + switch(tool) { + case 'java': validateJava(home) + return + case 'mta': validateMta(home) + return + case 'neo': validateNeo(home) + return + case 'cm': validateCm(home) + return + default: + throw new AbortException("The tool \'$tool\' is not supported. The following tools are supported: java, mta, neo and cm.") + } + } +} + +def validateJava(home) { + validateTool('Java', home, "$home/bin/java -version 2>&1", new Version(1,8,0)) +} + +def validateMta(home) { + validateTool('SAP Multitarget Application Archive Builder', home, "$JAVA_HOME/bin/java -jar $home/mta.jar -v", new Version(1, 0, 6)) +} + +def validateNeo(home) { + validateTool('SAP Cloud Platform Console Client', home, "$home/tools/neo.sh version", new Version(3, 39, 10)) +} + +def validateCm(home) { + validateTool('Change Management Command Line Interface', home, "$home/bin/cmclient -v", new Version(0, 0, 1)) +} + +def validateTool(name, home, command, expectedVersion) { + if (!name) throw new IllegalArgumentException("The parameter 'name' can not be null or empty.") + if (!home ) throw new IllegalArgumentException("The parameter 'home' can not be null or empty.") + if (!command ) throw new IllegalArgumentException("The parameter 'command' can not be null or empty.") + if (!expectedVersion) throw new IllegalArgumentException("The parameter 'expectedVersion' can not be null or empty.") + echo "[INFO] Validating $name version ${expectedVersion.toString()} or compatible version." + def output + try { + output = sh returnStdout: true, script: command + } catch(AbortException e) { + throw new AbortException("The validation of $name failed. Please check $name home '$home': $e.message.") + } + def version = new Version(output) + if (!version.isCompatibleVersion(expectedVersion)) { + throw new AbortException("The installed version of $name is ${version.toString()}. Please install version ${expectedVersion.toString()} or a compatible version.") + } + echo "[INFO] $name version ${version.toString()} is installed." +} +