{"action":"created","comment":{"url":"https://api.github.com/repos/openshift/openshift-docs/pulls/comments/78650190","id":78650190,"diff_hunk":"@@ -0,0 +1,254 @@\n+[[dev-guide-cicd]]\n+= CI / CD in OpenShift\n+{product-author}\n+{product-version}\n+:data-uri:\n+:icons:\n+:experimental:\n+:toc: macro\n+:toc-title:\n+\n+toc::[]\n+\n+== Overview\n+\n+{product-title} This next topic will focus on continuous integration and continuous delivery (`*CI/CD*`) of applications with OpenShift.  In particular, the goal is to\n+illustrate how the variety of concepts, infrastructure, hook points, and tools within OpenShift Origin facilitate `*CI/CD*`and the\n+promotion of your application through the pipeline, from development, then test, and ultimately to production.\n+\n+Now, when you consider the following variables:\n+\n+- whether your team is small or large\n+- whether your team is co-located or geographically disperse\n+- whether your resources are isolated or shared (or how much isolation or sharing can you afford)\n+- whether your processes are fully automated, manual (including the need for human initiated approvals), or some combination of the two\n+- whether your processes fall under the waterfall, agile, or devops methodologies, or have elements of any of the three\n+\n+the matrix that maps scenarios to solutions can seem complex, or at least large.\n+\n+However, this article will overcome and demystify this.  And it will cherry-pick and consolidate items discussed throughout OpenShift documentation and\n+re-present them, but with the specific focus of `*CI/CD*`.\n+\n+After a brief, high level inventory of components and concepts, followed by a mapping of items either available in OpenShift or easily accessible from OpenShift, to that inventory,\n+a series of use cases are provided to illustrate how to best leverage OpenShift Origin in this space.\n+\n+Mixed into the discussion at various points will be references to the OpenShift Jenkins image as the `*CI/CD*` engine.  With the OpenShift Jenkins Image's accompanying OpenShift templates and\n+baked-in set of plugins and configuration that greatly ease the integration between Jenkins and OpenShift combined with the burgeoning list of `*CI/CD*` centric features in\n+OpenShift itself, including the Jenkins Pipeline `*BuildConfigStrategy*`, a powerful `*CI/CD*` solution emerges.  That solution includes the ability to auto-provision a Jenkins server to run within\n+your OpenShift environment, as well as directly reference and initiate Jenkins Pipeline Jobs.\n+\n+[[inventory-summary]]\n+== Summary of Application Components And Relevant Tools\n+\n+Spoiler alert:  the \"application\" is more than just the source code written in say Java, Perl, Python, Ruby, or NodeJS.  It is more now than the static web\n+content, the integration scripts, the assoicated configuration for the language specific runtimes for the application, or the application specific archives\n+consumed by those language specific runtimes.\n+\n+By pulling in OpenShift Origin, and its combined foundation of Kubernetes and Docker, additional application artfacts now minimally include:\n+- Images with their rich set of metadata and associated tooling\n+- Environment Variables and a powerful array of API Objects that are either injected into Containers and Pods for application use, or dictate how the Orchestration Engine (OpenShift on Kubernetes) manages\n+those Containers and Pods\n+\n+And the second bullet there should serve as a reminder:  the lines between development and operations have blurred, and we want to improve the interaction between the two .... we now have \"DevOps\".\n+\n+But while the inventory of concerns has increased, many of the concepts and semantics around managing those concerns are thankfully very similar:\n+- versioning\n+- portability\n+- isolation\n+- upgrade and update\n+- hooks (into various flows)\n+\n+We'll next map these concerns to what is either available in or accessible from OpenShift to this problem domain.\n+\n+[[versioning]]\n+== Versioning\n+\n+Versioning in this topic's context refers to designating each of the components of your application to the stage in the `*CI/CD*` pipeline their readiness dictates they should reside.\n+\n+For your source code (in the classic sense), the OpenShift `*Build*`, `*BuildRequest*`, and `*BuildConfig*` object are of course the starting point.  They expose the most typically used\n+features of the `*SCM*` (most notably Git) to access the appropriate version of your source code (commit IDs, branches, context directories, etc.) and build the source code.\n+\n+But source code management (`*SCM*`) tooling is also leveraged througout the industry for managing many artifacts beyond what classically is defined as source code.\n+OpenShift also promotes such a strategy.\n+\n+And where a `*SCM*` is not appropriate, most notably Images, we have the OpenShift Internal Image Registry and `*ImageStreams*`. \n+\n+[[api-objects]]\n+=== API Objects\n+\n+As is highlighted throughout OpenShift documentation, every API Object can be expressed via either JSON or YAML.  That JSON or YAML can be stored in and retrieved from a\n+`*SCM*` system, with the its versioning related capabilities, including the creation of branches, assignment of and query on various labels or tags associated to versions.\n+\n+Also, the API Ojects are designed such that there are portions of the object which are intended to *specify* the Object's intent, and other\n+portions which reflect the *status* or current state of the Object.  Inputs and outputs in other words.  The input portions, when expressed in JSON/YAML, in particular are items\n+that naturally fit as artifacts stored in a `*SCM*`.\n+\n+[NOTE]\n+Remember, the input or specification portions of the API Objects can be totally static, or dynamic in the sense that variable substitution via template processing is possible on actual instantiation.\n+\n+More on all this later when we dive into the more precise examples.\n+\n+[[s2i]]\n+=== Image construction\n+\n+The next re-introduction of previously discussed items in OpenShift documentation: the Dockerfiles or S2I scripts and config files used to compose images are \"source\" in every sense, and typically\n+managed via souce code management tooling in `*SCM*` repositories as well.  Tag, label, and manage versions of those artifacts.  Check out varying versions of those artifacts during the build jobs\n+of your `*CI/CD*` tooling if it makes sense to vary the image composition in that way at different points of your `*CI/CD*` pipeline (though admittedly, such manipulations are most likely to occur in\n+the earlier, development type stages). \n+\n+[[image-streams]]\n+=== Images themselves and ImageStreams\n+\n+Again, as noted earlier,  Images are now artifacts of your application.  And in some cases, an Image (especially one produced by an OpenShift `*Build*`) might encapsulate the entirety of your application.\n+The new application binary if you will.\n+\n+To date, Images are not managed in a `*SCM*`itself (just like binaries were not).  However, just as installable artifacts and repositories (i.e. RPMs, RPM repo's) arose with similar semantics to `*SCMs*`,\n+similar constructs and terminology around image management that are eerily similar to `*SCMs*`have arisen:\n+- image registry == SCM server\n+- image repository == SCM repository\n+- `*ImageStream*` == SCM branch\n+- `*ImageStreamTag*` == SCM branch tag\n+\n+OpenShift builds, or the explicit use of `docker push` with the proper credentials, allows for storage of images in the OpenShift image registry (i.e. `git push`).\n+\n+The `oc import-image` is a specialized form of `docker pull`, as it pulls images from external registries puts them into the OpenShift image registry (i.e. a `git clone`).\n+\n+And analogous to `docker tag`, which is really analogous to `git tag`, the `oc tag` command allows you to control the desination of different versions of your image in an OpenShift `*ImageStream*`.\n+And note that `oc tag` also allows you to copy specific versions of an Image from one `*ImageStream*` to another, even across different `*Projects*` in a `*Cluster*`.\n+\n+Coupled with `*ImageChangeTriggers*`, the use of `oc tag` forms the simplest, most basic building block of *promotion* within OpenShift.\n+\n+And in the context of running the OpenShift Jenkins Image, with the OpenShift Pipeline Plugin for Jenkins installed and available, the \"Tag OpenShift Image\" Jenkins build step is essentially an `oc tag` under the covers.\n+Coupled with the additional Jenkins build steps that allow verifications of OpenShift `*Services*` and `*ReplicationContorllers*`, the building blocks to validate changes prior to promoting them via tagging take shape.\n+\n+More on this later when we dive into the more precise examples of the use of these tools.\n+\n+[[portability]]\n+== Portability\n+\n+Building upon how various OpenShift API Objects and Docker Image count as elements of your application (in addition to the classic binary executables / consumables produced by traditional programming\n+language files), once you've decided that a usable version of the application is available for a given stage of you pipeline, the next consideration is how can you import those API Objects and Images into the\n+corresponding staging environments of your pipeline.  And in the case of API Objects (much more *mutable* than Images), you quite possibly will need to transform them in some fashion as you propagate them\n+through the pipeline to varying environments.\n+\n+=== Images\n+\n+First, the simpler of the two (the immutability tenet and the common Docker based interfaces help once again) - Images:\n+- multiple `*Projects*` can access the same `*ImageStreams*`within a OpenShift Internal Image Registry\n+- multilple `*Clusters*` can access the same external Docker registries\n+\n+The CLI commands like `oc tag`, `oc import-image` noted in the Versioning section are tools for propagating and tranferring in addition to versioning.","path":"dev_guide/cicd.adoc","position":140,"original_position":140,"commit_id":"207f1ba26e7a5c31ecff4c5592627085161a1996","original_commit_id":"207f1ba26e7a5c31ecff4c5592627085161a1996","user":{"login":"gabemontero","id":3594868,"avatar_url":"https://avatars.githubusercontent.com/u/3594868?v=3","gravatar_id":"","url":"https://api.github.com/users/gabemontero","html_url":"https://github.com/gabemontero","followers_url":"https://api.github.com/users/gabemontero/followers","following_url":"https://api.github.com/users/gabemontero/following{/other_user}","gists_url":"https://api.github.com/users/gabemontero/gists{/gist_id}","starred_url":"https://api.github.com/users/gabemontero/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gabemontero/subscriptions","organizations_url":"https://api.github.com/users/gabemontero/orgs","repos_url":"https://api.github.com/users/gabemontero/repos","events_url":"https://api.github.com/users/gabemontero/events{/privacy}","received_events_url":"https://api.github.com/users/gabemontero/received_events","type":"User","site_admin":false},"body":"part of next push","created_at":"2016-09-13T21:42:37Z","updated_at":"2016-09-13T21:42:37Z","html_url":"https://github.com/openshift/openshift-docs/pull/2823#discussion_r78650190","pull_request_url":"https://api.github.com/repos/openshift/openshift-docs/pulls/2823","_links":{"self":{"href":"https://api.github.com/repos/openshift/openshift-docs/pulls/comments/78650190"},"html":{"href":"https://github.com/openshift/openshift-docs/pull/2823#discussion_r78650190"},"pull_request":{"href":"https://api.github.com/repos/openshift/openshift-docs/pulls/2823"}}},"pull_request":{"url":"https://api.github.com/repos/openshift/openshift-docs/pulls/2823","id":84791702,"html_url":"https://github.com/openshift/openshift-docs/pull/2823","diff_url":"https://github.com/openshift/openshift-docs/pull/2823.diff","patch_url":"https://github.com/openshift/openshift-docs/pull/2823.patch","issue_url":"https://api.github.com/repos/openshift/openshift-docs/issues/2823","number":2823,"state":"open","locked":false,"title":"WIP, DO NOT MERGE: formal CI/CD documentation","user":{"login":"gabemontero","id":3594868,"avatar_url":"https://avatars.githubusercontent.com/u/3594868?v=3","gravatar_id":"","url":"https://api.github.com/users/gabemontero","html_url":"https://github.com/gabemontero","followers_url":"https://api.github.com/users/gabemontero/followers","following_url":"https://api.github.com/users/gabemontero/following{/other_user}","gists_url":"https://api.github.com/users/gabemontero/gists{/gist_id}","starred_url":"https://api.github.com/users/gabemontero/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gabemontero/subscriptions","organizations_url":"https://api.github.com/users/gabemontero/orgs","repos_url":"https://api.github.com/users/gabemontero/repos","events_url":"https://api.github.com/users/gabemontero/events{/privacy}","received_events_url":"https://api.github.com/users/gabemontero/received_events","type":"User","site_admin":false},"body":"@bparees @jupierce PTAL\r\n\r\nThis is the *START* of the documentation update motivated by https://trello.com/c/HlQpE52w/848-8-provide-example-of-promoting-application-between-datacenters-projects-evg\r\n\r\nHowever, as discussed during planning and scrums, before diving into specifics for application promotion between data centers and projects, he seemed high time to me that we tackle CI/CD within OpenShift overall as a topic, with first class treatment given its priority, and start connecting together all the various nuggets of goodness sprinkled throughout are samples and documentation into one place.\r\n\r\nThis pull in starting out with essentially the introduction into that effort.\r\n\r\nI have not gone as far yet as mark explicit links to other places in the documentation and repo samples that are being referenced, but will commence with that once the specific content solidifies.\r\n\r\nWhile the comments and rework of these introduction sections commences, I'll also start working in parallel on the specific example sections currently left blank, and submit pull updates when they are ready for review.\r\n\r\nthanks","created_at":"2016-09-11T17:01:17Z","updated_at":"2016-09-13T21:42:37Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a220d28a2bca17631a624ebfc248ea7089c0e53c","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/openshift/openshift-docs/pulls/2823/commits","review_comments_url":"https://api.github.com/repos/openshift/openshift-docs/pulls/2823/comments","review_comment_url":"https://api.github.com/repos/openshift/openshift-docs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/openshift/openshift-docs/issues/2823/comments","statuses_url":"https://api.github.com/repos/openshift/openshift-docs/statuses/207f1ba26e7a5c31ecff4c5592627085161a1996","head":{"label":"gabemontero:CICD-Promotion","ref":"CICD-Promotion","sha":"207f1ba26e7a5c31ecff4c5592627085161a1996","user":{"login":"gabemontero","id":3594868,"avatar_url":"https://avatars.githubusercontent.com/u/3594868?v=3","gravatar_id":"","url":"https://api.github.com/users/gabemontero","html_url":"https://github.com/gabemontero","followers_url":"https://api.github.com/users/gabemontero/followers","following_url":"https://api.github.com/users/gabemontero/following{/other_user}","gists_url":"https://api.github.com/users/gabemontero/gists{/gist_id}","starred_url":"https://api.github.com/users/gabemontero/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gabemontero/subscriptions","organizations_url":"https://api.github.com/users/gabemontero/orgs","repos_url":"https://api.github.com/users/gabemontero/repos","events_url":"https://api.github.com/users/gabemontero/events{/privacy}","received_events_url":"https://api.github.com/users/gabemontero/received_events","type":"User","site_admin":false},"repo":{"id":38077544,"name":"openshift-docs","full_name":"gabemontero/openshift-docs","owner":{"login":"gabemontero","id":3594868,"avatar_url":"https://avatars.githubusercontent.com/u/3594868?v=3","gravatar_id":"","url":"https://api.github.com/users/gabemontero","html_url":"https://github.com/gabemontero","followers_url":"https://api.github.com/users/gabemontero/followers","following_url":"https://api.github.com/users/gabemontero/following{/other_user}","gists_url":"https://api.github.com/users/gabemontero/gists{/gist_id}","starred_url":"https://api.github.com/users/gabemontero/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gabemontero/subscriptions","organizations_url":"https://api.github.com/users/gabemontero/orgs","repos_url":"https://api.github.com/users/gabemontero/repos","events_url":"https://api.github.com/users/gabemontero/events{/privacy}","received_events_url":"https://api.github.com/users/gabemontero/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/gabemontero/openshift-docs","description":"OpenShift Documentation","fork":true,"url":"https://api.github.com/repos/gabemontero/openshift-docs","forks_url":"https://api.github.com/repos/gabemontero/openshift-docs/forks","keys_url":"https://api.github.com/repos/gabemontero/openshift-docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/gabemontero/openshift-docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/gabemontero/openshift-docs/teams","hooks_url":"https://api.github.com/repos/gabemontero/openshift-docs/hooks","issue_events_url":"https://api.github.com/repos/gabemontero/openshift-docs/issues/events{/number}","events_url":"https://api.github.com/repos/gabemontero/openshift-docs/events","assignees_url":"https://api.github.com/repos/gabemontero/openshift-docs/assignees{/user}","branches_url":"https://api.github.com/repos/gabemontero/openshift-docs/branches{/branch}","tags_url":"https://api.github.com/repos/gabemontero/openshift-docs/tags","blobs_url":"https://api.github.com/repos/gabemontero/openshift-docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/gabemontero/openshift-docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/gabemontero/openshift-docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/gabemontero/openshift-docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/gabemontero/openshift-docs/statuses/{sha}","languages_url":"https://api.github.com/repos/gabemontero/openshift-docs/languages","stargazers_url":"https://api.github.com/repos/gabemontero/openshift-docs/stargazers","contributors_url":"https://api.github.com/repos/gabemontero/openshift-docs/contributors","subscribers_url":"https://api.github.com/repos/gabemontero/openshift-docs/subscribers","subscription_url":"https://api.github.com/repos/gabemontero/openshift-docs/subscription","commits_url":"https://api.github.com/repos/gabemontero/openshift-docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/gabemontero/openshift-docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/gabemontero/openshift-docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/gabemontero/openshift-docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/gabemontero/openshift-docs/contents/{+path}","compare_url":"https://api.github.com/repos/gabemontero/openshift-docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/gabemontero/openshift-docs/merges","archive_url":"https://api.github.com/repos/gabemontero/openshift-docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/gabemontero/openshift-docs/downloads","issues_url":"https://api.github.com/repos/gabemontero/openshift-docs/issues{/number}","pulls_url":"https://api.github.com/repos/gabemontero/openshift-docs/pulls{/number}","milestones_url":"https://api.github.com/repos/gabemontero/openshift-docs/milestones{/number}","notifications_url":"https://api.github.com/repos/gabemontero/openshift-docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/gabemontero/openshift-docs/labels{/name}","releases_url":"https://api.github.com/repos/gabemontero/openshift-docs/releases{/id}","deployments_url":"https://api.github.com/repos/gabemontero/openshift-docs/deployments","created_at":"2015-06-25T22:21:52Z","updated_at":"2016-01-15T15:32:21Z","pushed_at":"2016-09-12T13:12:13Z","git_url":"git://github.com/gabemontero/openshift-docs.git","ssh_url":"git@github.com:gabemontero/openshift-docs.git","clone_url":"https://github.com/gabemontero/openshift-docs.git","svn_url":"https://github.com/gabemontero/openshift-docs","homepage":null,"size":13973,"stargazers_count":0,"watchers_count":0,"language":"CSS","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"openshift:master","ref":"master","sha":"7ba4bdbe0131608d90c6f11f70aec63a4cf86f1c","user":{"login":"openshift","id":792337,"avatar_url":"https://avatars.githubusercontent.com/u/792337?v=3","gravatar_id":"","url":"https://api.github.com/users/openshift","html_url":"https://github.com/openshift","followers_url":"https://api.github.com/users/openshift/followers","following_url":"https://api.github.com/users/openshift/following{/other_user}","gists_url":"https://api.github.com/users/openshift/gists{/gist_id}","starred_url":"https://api.github.com/users/openshift/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openshift/subscriptions","organizations_url":"https://api.github.com/users/openshift/orgs","repos_url":"https://api.github.com/users/openshift/repos","events_url":"https://api.github.com/users/openshift/events{/privacy}","received_events_url":"https://api.github.com/users/openshift/received_events","type":"Organization","site_admin":false},"repo":{"id":21740844,"name":"openshift-docs","full_name":"openshift/openshift-docs","owner":{"login":"openshift","id":792337,"avatar_url":"https://avatars.githubusercontent.com/u/792337?v=3","gravatar_id":"","url":"https://api.github.com/users/openshift","html_url":"https://github.com/openshift","followers_url":"https://api.github.com/users/openshift/followers","following_url":"https://api.github.com/users/openshift/following{/other_user}","gists_url":"https://api.github.com/users/openshift/gists{/gist_id}","starred_url":"https://api.github.com/users/openshift/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openshift/subscriptions","organizations_url":"https://api.github.com/users/openshift/orgs","repos_url":"https://api.github.com/users/openshift/repos","events_url":"https://api.github.com/users/openshift/events{/privacy}","received_events_url":"https://api.github.com/users/openshift/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/openshift/openshift-docs","description":"OpenShift Documentation","fork":false,"url":"https://api.github.com/repos/openshift/openshift-docs","forks_url":"https://api.github.com/repos/openshift/openshift-docs/forks","keys_url":"https://api.github.com/repos/openshift/openshift-docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/openshift/openshift-docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/openshift/openshift-docs/teams","hooks_url":"https://api.github.com/repos/openshift/openshift-docs/hooks","issue_events_url":"https://api.github.com/repos/openshift/openshift-docs/issues/events{/number}","events_url":"https://api.github.com/repos/openshift/openshift-docs/events","assignees_url":"https://api.github.com/repos/openshift/openshift-docs/assignees{/user}","branches_url":"https://api.github.com/repos/openshift/openshift-docs/branches{/branch}","tags_url":"https://api.github.com/repos/openshift/openshift-docs/tags","blobs_url":"https://api.github.com/repos/openshift/openshift-docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/openshift/openshift-docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/openshift/openshift-docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/openshift/openshift-docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/openshift/openshift-docs/statuses/{sha}","languages_url":"https://api.github.com/repos/openshift/openshift-docs/languages","stargazers_url":"https://api.github.com/repos/openshift/openshift-docs/stargazers","contributors_url":"https://api.github.com/repos/openshift/openshift-docs/contributors","subscribers_url":"https://api.github.com/repos/openshift/openshift-docs/subscribers","subscription_url":"https://api.github.com/repos/openshift/openshift-docs/subscription","commits_url":"https://api.github.com/repos/openshift/openshift-docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/openshift/openshift-docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/openshift/openshift-docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/openshift/openshift-docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/openshift/openshift-docs/contents/{+path}","compare_url":"https://api.github.com/repos/openshift/openshift-docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/openshift/openshift-docs/merges","archive_url":"https://api.github.com/repos/openshift/openshift-docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/openshift/openshift-docs/downloads","issues_url":"https://api.github.com/repos/openshift/openshift-docs/issues{/number}","pulls_url":"https://api.github.com/repos/openshift/openshift-docs/pulls{/number}","milestones_url":"https://api.github.com/repos/openshift/openshift-docs/milestones{/number}","notifications_url":"https://api.github.com/repos/openshift/openshift-docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/openshift/openshift-docs/labels{/name}","releases_url":"https://api.github.com/repos/openshift/openshift-docs/releases{/id}","deployments_url":"https://api.github.com/repos/openshift/openshift-docs/deployments","created_at":"2014-07-11T15:14:42Z","updated_at":"2016-09-09T07:21:34Z","pushed_at":"2016-09-13T20:06:41Z","git_url":"git://github.com/openshift/openshift-docs.git","ssh_url":"git@github.com:openshift/openshift-docs.git","clone_url":"https://github.com/openshift/openshift-docs.git","svn_url":"https://github.com/openshift/openshift-docs","homepage":"https://docs.openshift.org/latest/welcome/index.html","size":25117,"stargazers_count":52,"watchers_count":52,"language":"CSS","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":254,"mirror_url":null,"open_issues_count":216,"forks":254,"open_issues":216,"watchers":52,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/openshift/openshift-docs/pulls/2823"},"html":{"href":"https://github.com/openshift/openshift-docs/pull/2823"},"issue":{"href":"https://api.github.com/repos/openshift/openshift-docs/issues/2823"},"comments":{"href":"https://api.github.com/repos/openshift/openshift-docs/issues/2823/comments"},"review_comments":{"href":"https://api.github.com/repos/openshift/openshift-docs/pulls/2823/comments"},"review_comment":{"href":"https://api.github.com/repos/openshift/openshift-docs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/openshift/openshift-docs/pulls/2823/commits"},"statuses":{"href":"https://api.github.com/repos/openshift/openshift-docs/statuses/207f1ba26e7a5c31ecff4c5592627085161a1996"}}}}
{"actor":{"display_login":"gabemontero"}}