{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2018-01-08T23:20:39.306357Z", "start_time": "2018-01-08T23:20:39.297432Z" }, "init_cell": true }, "outputs": [], "source": [ "from traitlets.config.manager import BaseJSONConfigManager\n", "from traitlets.config.manager import BaseJSONConfigManager\n", "path = \"/home/jeandet/.jupyter/nbconfig\"\n", "cm = BaseJSONConfigManager(config_dir=path)\n", "cm.update(\"livereveal\", {\n", " \"theme\": \"solarized\",\n", " \"transition\": \"zoom\",\n", " \"start_slideshow_at\": \"selected\"\n", "});\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# TeamCity\n", "\n", "
\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# TC Overview\n", "\n", "* A powerful distributed Continuous Integration tool\n", "* Rich plugin ecosystem\n", "* Really customizable system\n", "* Not so complex...\n", "* Mostly written in Java\n", "* Closed source :(" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# TC Plugins (335 on [JetBrains website](https://plugins.jetbrains.com/teamcity) )\n", "\n", "* Web Hooks plugin \n", "* AWS S3 Artifact Storage \n", "* Google Cloud Agents \n", "* Docker Cloud \n", "* Debian Package Server \n", "* Slack Build Notifier\n", "\n", "\n", "** Installation as simple as uploading a zip file! **\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "ExecuteTime": { "end_time": "2018-01-02T20:14:04.757140Z", "start_time": "2018-01-02T20:14:04.749828Z" }, "slideshow": { "slide_type": "slide" } }, "source": [ "# Vocabulary\n", "\n", "* **Agent**: where stuff is done" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "* **Build step**: the smallest build task subdivision ( [example](https://hephaistos.lpp.polytechnique.fr/teamcity/admin/editBuildRunners.html?id=buildType:SciQLop_UnitTests) ) " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "* **Build config**: a collection of build steps ( [example](https://hephaistos.lpp.polytechnique.fr/teamcity/admin/editBuild.html?id=buildType:SciQLop_UnitTests) )" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "* **VCS root**: a mostly a vcs URL + some options ( [example](https://hephaistos.lpp.polytechnique.fr/teamcity/admin/editVcsRoot.html?action=editVcsRoot&vcsRootId=SciQLop_HttpsHephaistosLppPolytechniqueFrRhodecodeHgRepositoriesLppSciQLOPReposS&editingScope=buildType%3ASciQLop_UnitTests&cameFromUrl=%2Fteamcity%2Fadmin%2FeditBuildTypeVcsRoots.html%3Finit%3D1%26id%3DbuildType%253ASciQLop_UnitTests&cameFromTitle=Edit%20Build%20Configuration) )" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "* **Project**: a collection of build configs + VCS + settings ( [example](https://hephaistos.lpp.polytechnique.fr/teamcity/admin/editProject.html?projectId=SciQLop) )" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "* **Build artifact**: a file or a folder produced during the build ( [example](https://hephaistos.lpp.polytechnique.fr/teamcity/overview.html) )" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# LPP goals (What we want)\n", "\n", "\n", "* Being able to build on different OS" ] }, { "cell_type": "markdown", "metadata": { "ExecuteTime": { "end_time": "2018-01-08T19:36:05.070215Z", "start_time": "2018-01-08T19:36:05.066706Z" }, "slideshow": { "slide_type": "fragment" } }, "source": [ "* Build inside a clean environment" ] }, { "cell_type": "markdown", "metadata": { "ExecuteTime": { "end_time": "2018-01-08T19:36:05.399625Z", "start_time": "2018-01-08T19:36:05.394453Z" }, "slideshow": { "slide_type": "fragment" } }, "source": [ "* Produce compatibility matrices" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "* Being faster than Travis" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "* Customize workflow" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# LPP Setup\n", "
\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Available build agents\n", "\n", "* Based on Docker cloud plugin\n", "* Virtually anything that runs either inside **Docker** or **VirtualBox**(Vagrant)\n", "* Spawn on demand\n", "* For now **Windows**, **Linux**(Fedora, Ubuntu), **FreeBSD** and **Mac OSX** 10.12.2(Siera)\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# I want to choose where I get built!\n", "\n", "**Team city introduce the notion of build requirements.**\n", "\n", "- Agents expose [parameters](https://hephaistos.lpp.polytechnique.fr/teamcity/agentDetails.html?agentTypeId=72&tab=agentParameters)(<=> properties). [sources](https://github.com/jeandet/teamcity-docker-complete-agent/blob/master/Dockerfile#L36)\n", "\n", "- So for each build config ones can declare some [requirements](https://hephaistos.lpp.polytechnique.fr/teamcity/admin/editRequirements.html?id=buildType:Miniphare_Build) that the agent has to match." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# What about reports?\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# API?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Time to play!" ] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.3" }, "toc": { "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }