{"id":19855426,"url":"https://github.com/gtesei/patterns_for_continuous_integration","last_synced_at":"2026-04-18T14:03:39.288Z","repository":{"id":71994718,"uuid":"152668134","full_name":"gtesei/Patterns_for_Continuous_Integration","owner":"gtesei","description":"Patterns of Continuous Integration for Data Science Python Projects","archived":false,"fork":false,"pushed_at":"2018-10-19T21:13:29.000Z","size":5,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-28T19:46:45.669Z","etag":null,"topics":["continuous-integration","coveralls","docker","pytest","python","travis-ci"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gtesei.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-10-11T23:34:57.000Z","updated_at":"2020-03-31T13:31:18.000Z","dependencies_parsed_at":null,"dependency_job_id":"61295992-dc2e-408b-b89e-87510fdba701","html_url":"https://github.com/gtesei/Patterns_for_Continuous_Integration","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gtesei/Patterns_for_Continuous_Integration","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gtesei%2FPatterns_for_Continuous_Integration","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gtesei%2FPatterns_for_Continuous_Integration/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gtesei%2FPatterns_for_Continuous_Integration/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gtesei%2FPatterns_for_Continuous_Integration/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gtesei","download_url":"https://codeload.github.com/gtesei/Patterns_for_Continuous_Integration/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gtesei%2FPatterns_for_Continuous_Integration/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31971493,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T00:39:45.007Z","status":"online","status_checked_at":"2026-04-18T02:00:07.018Z","response_time":103,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["continuous-integration","coveralls","docker","pytest","python","travis-ci"],"created_at":"2024-11-12T14:12:41.970Z","updated_at":"2026-04-18T14:03:37.297Z","avatar_url":"https://github.com/gtesei.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Patterns for Continuous Integration\n\n__Full story:__ [Patterns of Continuous Integration for Data Science Python Projects](https://medium.com/@gtesei/the-ci-arsenal-that-any-open-source-machine-learning-python-project-should-consider-e34759dd66c4)\n\n[![Build Status](https://api.travis-ci.org/gtesei/Patterns_for_Continuous_Integration_Docker_Travis_CI_2_DEV.svg?branch=master)](https://travis-ci.org/gtesei/Patterns_for_Continuous_Integration_Docker_Travis_CI_2_DEV)\n[![PyPI version](https://badge.fury.io/py/python-dev-docker-project.svg)](https://badge.fury.io/py/python-dev-docker-project)\n[![Coverage Status](https://coveralls.io/repos/github/gtesei/Patterns_for_Continuous_Integration_Docker_Travis_CI_2_DEV/badge.svg?branch=master)](https://coveralls.io/github/gtesei/Patterns_for_Continuous_Integration_Docker_Travis_CI_2_DEV?branch=master)\n[![Documentation Status](https://readthedocs.org/projects/patterns-for-continuous-integration-docker-travis-ci-2-dev/badge/?version=latest)](https://patterns-for-continuous-integration-docker-travis-ci-2-dev.readthedocs.io/en/latest/?badge=latest)\n\n## Travis CI \n\nFocus on Travis CI.  \n\n### [Patterns for Continuous Integration with Docker using Travis CI - Part. 1](https://github.com/gtesei/Patterns_for_Continuous_Integration_Docker_Travis_CI_1)\n\n__Warming up__: for each commit on the master branch we want to build a Docker image according to a given Dockerfile and push it on Docker Hub (or different Docker Registry) using Travis CI.\n\n![Warming up](https://raw.githubusercontent.com/gtesei/Patterns_for_Continuous_Integration_Docker_Travis_CI_1/master/img/part_1.png)\n\n### Patterns for Continuous Integration with Docker using Travis CI - Part. 2 \n\n__The “Docker repo” pattern__: _create two separate Git repositories: one for Docker release and another for software development. This keeps the Docker-specific code isolated from the actual software. Developers can continue working on the source software as usual, while the production Docker image is developed separately_\n\n![The “Docker repo” pattern](https://raw.githubusercontent.com/gtesei/Patterns_for_Continuous_Integration_Docker_Travis_CI_2_DEV/master/img/end-to-end-flow.png)\n\nThis keeps the Docker-specific code, which could be considered a deployment detail, isolated from the actual software. Developers can continue working on the source software as usual, while the production Docker image is developed separately.\n\n#### [Git repository for software development](https://github.com/gtesei/Patterns_for_Continuous_Integration_Docker_Travis_CI_2_DEV) \n\nTeam uses different branches for development and, a certain point, pull-requests for merge the master branch are done. For each one of them, committing the master branch:\n- modifying the version number in _setup.py_, a new release will be created on the package repository (e.g. [PyPI](https://pypi.org/)), \n- modifying [MkDocs](https://www.mkdocs.org/) ```mkdocs.yml``` and Markdown files under ```doc/``` a new documentation is build by [Read The Docs](https://readthedocs.org/) and [published on-line](https://patterns-for-continuous-integration-docker-travis-ci-2-dev.readthedocs.io/en/latest/?badge=latest) for consultation,   \n- Travis CI builds, tests and packages the software by using __py.test__ and __measuring code coverage of Python code__.\n- if such tests are successful: \n    - code coverage stats are published on [coveralls.io](https://coveralls.io/) through [coveralls](https://pypi.org/project/coveralls/),\n    - Travis CI does a release of the software by uploading the package to the package repository (e.g. [PyPI](https://pypi.org/)),\n    - Travis CI does two new docker development images, e.g. _e59cbe8-develop_ (image for last commit on master branch) and _develop_ (the official develop image of the project), on the Docker Registry, e.g. [Docker Hub](https://hub.docker.com).\n\n#### [Git repository for Docker release](https://github.com/gtesei/Patterns_for_Continuous_Integration_Docker_Travis_CI_2_PROD) \n\nWhen a new development release (e.g. _0.3.9.dev0_) is ready and tested for production (see [Patterns for Continuous Integration with Docker using Travis CI 2 - Dev. Repo](https://github.com/gtesei/Patterns_for_Continuous_Integration_Docker_Travis_CI_2_DEV) for more details), someone updates consequently the requirements.txt file and commits on master. In this way:\n- Travis CI builds, tests and packages the software, \n- Travis CI does two new docker development images, e.g. _0.3.9.dev0_ (the image of the development release tagged for production, for archiving purpouse) and _latest_ (the production image of the project), on the Docker Registry, e.g. [Docker Hub](https://hub.docker.com).\n\n\n## Jenkins  \n\nFocus on Jenkins.\n\n![Patterns for Continuous Integration with Docker using Jenkins](https://raw.githubusercontent.com/gtesei/Patterns_for_Continuous_Integration_Docker_Jenkins/master/img/Docker_Repo_Pattern_Jenkins.png)\n\n#### [Patterns for Continuous Integration with Docker using Jenkins](https://github.com/gtesei/Patterns_for_Continuous_Integration_Docker_Jenkins) \n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgtesei%2Fpatterns_for_continuous_integration","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgtesei%2Fpatterns_for_continuous_integration","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgtesei%2Fpatterns_for_continuous_integration/lists"}