{"action":"created","comment":{"url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/pulls/comments/88891175","pull_request_review_id":9378954,"id":88891175,"diff_hunk":"@@ -0,0 +1,447 @@\n+#Deploy and use a Private Docker Registry in an Application\n+\n+This document describes how to set up and secure your own private Docker registry on Microsoft Azure. We will also set up a Continuous Integration build (CI) that will allow us to build and run Docker images, inspect and scan containers, push Docker images to your own private Docker registry and clean up build environment whenever the branch is updated.  \n+\n+**Prerequisites**\n+\n+- You know how to use [Ubuntu](https://www.ubuntu.com/), [PuTTY](http://www.chiark.greenend.org.uk/~sgtatham/putty/) and [Docker](https://www.docker.com/whatisdocker)\n+\n+- Complete the [Dockerizing Parts Unlimited MRP](https://microsoft.github.io/PartsUnlimitedMRP/adv/adv-21-Docker.html) lab\n+\n+- An active Visual Studio Team Services (VSTS) account\n+\n+- You know how to set up Continuous Integration (CI) with Visual Studio Team Services (You don't? [Learn about CI](https://github.com/Intergen-NZ/PartsUnlimited/tree/Develop/docs/HOL-Continuous_Integration))  \n+\n+**Tasks Overview**\n+\n+**1. Set up a private Docker registry** This will walk you through creating a private Docker registry. It also demonstrates how to tag, push and pull your images.   \n+\n+**2. Set up Continuous Integration with Visual Studio Team Services** Integrate Docker images and containers into your DevOps workflows using [Docker Integration](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.docker) for Team Services. This Docker extension adds a task that enables you to build Docker images, push Docker images to an authenticated Docker registry, run Docker images or execute other operations offered by the Docker CLI.   \n+\n+###Task 1: Set up a private Docker registry\n+**Step 1.** Deploy an Ubuntu VM with Docker Engine. [Do it quickly on Azure](https://azure.microsoft.com/en-us/documentation/templates/docker-simple-on-ubuntu/)  \n+\n+> **Note:** Latest Ubuntu OS version is recommended.\n+\n+**Step 2.** Once deployed, SSH into the Ubuntu VM using [PuTTY](http://www.chiark.greenend.org.uk/~sgtatham/putty/):\n+\n+![](<media/putty.png>)\n+\n+Enter your credentials to your VM:\n+\n+![](<media/entercredentials.png>)\n+\n+**Step 3.** Install apache2-utils package. It contains the htpasswd utility which will be used to generate password hashes Nginx can understand:\n+```\n+$ sudo apt-get -y install apache2-utils\n+```\n+**Step 4.** [Docker Compose](https://docs.docker.com/compose/) allows you to write one YAML file to set up multiple containers and manage communication between them. Create a docker-compose.yml file using your favorite text editor:\n+```\n+$ mkdir ~/docker-registry && cd $_\n+$ nano docker-compose.yml\n+```\n+\n+**Step 5.** Set up a Docker registry container. Add and save the following contents to docker-compose.yml file, and replace **storage-account** and **storage-key** with your storage account name and access key:\n+```\n+registry:\n+  image: registry:2\n+  ports:\n+    - 127.0.0.1:5000:5000\n+  environment:\n+    - REGISTRY_STORAGE=azure\n+    - REGISTRY_STORAGE_AZURE_ACCOUNTNAME=\"<storage-account>\"\n+    - REGISTRY_STORAGE_AZURE_ACCOUNTKEY=\"<storage-key>\"\n+    - REGISTRY_STORAGE_AZURE_CONTAINER=\"registry\"\n+  volumes:\n+    - ./data:/data\n+```\n+\n+By hosting your Docker Registry instance on Azure VM and storing your images on Azure Blob Storage, you can have several benefits, such as security, performance and reliability.   \n+\n+**Step 6.** Set up a Docker Nginx container, and link it up to Docker registry container. Nginx is used to handle security and communication in this lab. Create a directory to store Nginx data:\n+```\n+$ mkdir ~/docker-registry/nginx\n+```\n+\n+Re-open the docker-compose.yml file in the ~/docker-registry directory:\n+```\n+$ nano docker-compose.yml\n+```\n+\n+Create a new Docker Nginx container based on the official Nginx image. Paste the following contents at the beginning of docker-compose.yml file and save it:\n+```\n+nginx:\n+  image: \"nginx:1.9\"\n+  ports:\n+    - 443:443\n+  links:\n+    - registry:registry\n+  volumes:\n+    - ./nginx/:/etc/nginx/conf.d:ro\n+```\n+The interesting bit here is the **links** section. It automatically set up a \"link\" to the registry container. The **volumes** section provides a way to map files in Nginx container to the host machine.\n+\n+The final version of docker-compose.yml file should look similar to the following:\n+\n+```\n+nginx:\n+  image: \"nginx:1.9\"\n+  ports:\n+    - 443:443\n+  links:\n+    - registry:registry\n+  volumes:\n+    - ./nginx/:/etc/nginx/conf.d:ro\n+registry:\n+  image: registry:2\n+  ports:\n+    - 127.0.0.1:5000:5000\n+  environment:\n+    - REGISTRY_STORAGE=azure\n+    - REGISTRY_STORAGE_AZURE_ACCOUNTNAME=\"mydockerstorageaccountname\"\n+    - REGISTRY_STORAGE_AZURE_ACCOUNTKEY=\"3c2BbH31iBjliyVh7CSjq9T/luFfwSt1zRZKXEWEu6HcImwXO9ccL124/MY4lemGGm8n7To2IVNr8EmRA==\"\n+    - REGISTRY_STORAGE_AZURE_CONTAINER=\"registry\"\n+  volumes:\n+    - ./data:/data\n+```\n+\n+**Step 7.** Create a registry.conf file:\n+```\n+$ nano ~/docker-registry/nginx/registry.conf\n+```\n+\n+Copy and save the following contents into registry.conf file, and change the value of **server_name** to the DNS name or public IP of your Ubuntu VM (e.g., myregistrydomain.com):\n+```\n+upstream docker-registry {\n+  server registry:5000;\n+}\n+\n+server {\n+  listen 443;\n+  server_name <server_name>;\n+\n+  # SSL\n+  ssl on;\n+  ssl_certificate /etc/nginx/conf.d/domain.crt;\n+  ssl_certificate_key /etc/nginx/conf.d/domain.key;\n+\n+  # disable any limits to avoid HTTP 413 for large image uploads\n+  client_max_body_size 0;\n+\n+  # required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)\n+  chunked_transfer_encoding on;\n+\n+  location /v2/ {\n+    # Do not allow connections from docker 1.5 and earlier\n+    # docker pre-1.6.0 did not properly set the user agent on ping, catch \"Go *\" user agents\n+    if ($http_user_agent ~ \"^(docker\\/1\\.(3|4|5(?!\\.[0-9]-dev))|Go ).*$\" ) {\n+      return 404;\n+    }\n+\n+    # To add basic authentication to v2 use auth_basic setting plus add_header\n+    auth_basic \"registry.localhost\";\n+    auth_basic_user_file /etc/nginx/conf.d/registry.password;\n+    add_header 'Docker-Distribution-Api-Version' 'registry/2.0' always;\n+\n+    proxy_pass                          http://docker-registry;\n+    proxy_set_header  Host              $http_host;   # required for docker client's sake\n+    proxy_set_header  X-Real-IP         $remote_addr; # pass on real client's IP\n+    proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;\n+    proxy_set_header  X-Forwarded-Proto $scheme;\n+    proxy_read_timeout                  900;\n+  }\n+}\n+```\n+\n+**Step 8.** Set up basic authentication. Let's create a file named registry.password using htpasswd utility for storing user credentials. Replace **user-name** with your preferred user name, and enter your preferred password when prompted. The user name and password will be used to log into your private Docker registry later.\n+```\n+$ cd ~/docker-registry/nginx\n+$ htpasswd -c registry.password <user-name>\n+```\n+\n+**Step 9.** Nginx container is configured to use SSL and will look for SSL certificate and key files in **/etc/nginx/conf.d** folder. Due to the mapping we configured earlier in docker-compose.yml file, the **/etc/nginx/conf.d** folder inside Nginx container is mapped to the folder **~/docker-registry/nginx** on your host machine. Let's drop your certificate and key files in that folder.\n+\n+If you need to create a self-signed certificate, please follow this instruction. To begin, let's change to ~/docker-registry/nginx folder and get ready to create the certificate:\n+```\n+$ cd ~/docker-registry/nginx\n+```\n+Generate your own certificate and be sure to use the DNS name of your Ubuntu VM (e.g., myregistrydomain.com) as CN:\n+```\n+$ openssl req -newkey rsa:4096 -nodes -sha256 -keyout domain.key -x509 -days 365 -out domain.crt\n+```\n+\n+![](<media/generatecert.png>)\n+\n+Since the certificate we just generated isn't verified by any known certificate authority (e.g., VeriSign), we will need to tell **all the clients** that this is a legitimate certificate. Let's do this locally on the host machine so that we can use Docker from the Docker registry server itself:\n+```\n+$ sudo mkdir /usr/local/share/ca-certificates/docker-dev-cert\n+$ sudo cp domain.crt /usr/local/share/ca-certificates/docker-dev-cert\n+$ sudo update-ca-certificates\n+```\n+\n+**Step 10.** Restart the Docker daemon so that it picks up the changes made in certificate store:\n+```\n+$ sudo service docker restart\n+```\n+\n+**Step 11.** It's time to start up an instance of your private Docker registry:\n+```\n+$ cd ~/docker-registry\n+$ docker-compose up\n+```\n+\n+**Step 12.** Open up another terminal and verify that the private Docker registry is running by executing:\n+```\n+$ docker ps\n+```\n+The output should look similar to the following:\n+```\n+CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                          NAMES\n+d4b6fef0b4d1        nginx:1.9           \"nginx -g 'daemon of   2 minutes ago       Up 2 minutes        80/tcp, 0.0.0.0:443->443/tcp   dockerregistry_nginx_1\n+77668352bd39        registry:2          \"registry cmd/regist   2 minutes ago       Up 2 minutes        127.0.0.1:5000->5000/tcp       dockerregistry_registry_1\n+```\n+> **Note:** The names all start with dockerregistry_\n+\n+**Step 13.** Let's try another curl test using your credentials and domain name:\n+```\n+$ curl https://<user-name>:<password>@<domain-name>/v2/\n+```\n+As of this writing Docker returns an empty json object, so you should see:\n+```\n+{}\n+```\n+\n+**Step 14.** Log in to Docker registry from a client machine by executing:\n+```\n+$ docker login https://<domain-name>\n+```\n+Enter the username and password you created earlier, and you should see the following message:\n+```\n+Login Succeeded\n+```\n+> **Note:** If you use a self-signed certificate, please add the SSL certificate you created in Step 14 to this client machine.\n+\n+**Step 15.** You are now ready to publish images to the private Docker registry. Create Docker images by following this [Dockerizing Parts Unlimited MRP](https://microsoft.github.io/PartsUnlimitedMRP/adv/adv-21-Docker.html) lab. Tag an image with your registry's domain name (e.g., myregistrydomain.com/web) in order to push it:\n+```\n+$ docker tag mypartsunlimitedmrp/web <domain-name>/web\n+```\n+\n+**Step 16.** Now we can push this image (e.g., myregistrydomain.com/web) to the private Docker registry:\n+```\n+$ docker push <domain-name>/web\n+```\n+This will take a moment to upload to the registry server. You should see output that ends with something similar to the following:\n+```\n+latest: digest: sha256:d35c98ab2f3ec8d963e0d20a3577c8da23f7366d129959195749858da964fb0d size: 3251\n+```\n+New Docker image appears in your Azure Blob storage.\n+\n+![](<media/repo.png>)\n+\n+**Step 17.** Pull this image (e.g., myregistrydomain.com/web) back from private Docker registry:\n+```\n+$ docker pull <domain-name>/web\n+```\n+\n+###Task 2: Set up Continuous Integration (CI) with Visual Studio Team Services (VSTS)  \n+","path":"docs/HOL_Deploy_Private_Docker_Registry/README.md","position":247,"original_position":247,"commit_id":"72fa5fe3024aabcb4b60de6a2dcbefbd5561cae4","original_commit_id":"72fa5fe3024aabcb4b60de6a2dcbefbd5561cae4","user":{"login":"julienstroheker","id":8661347,"avatar_url":"https://avatars.githubusercontent.com/u/8661347?v=3","gravatar_id":"","url":"https://api.github.com/users/julienstroheker","html_url":"https://github.com/julienstroheker","followers_url":"https://api.github.com/users/julienstroheker/followers","following_url":"https://api.github.com/users/julienstroheker/following{/other_user}","gists_url":"https://api.github.com/users/julienstroheker/gists{/gist_id}","starred_url":"https://api.github.com/users/julienstroheker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/julienstroheker/subscriptions","organizations_url":"https://api.github.com/users/julienstroheker/orgs","repos_url":"https://api.github.com/users/julienstroheker/repos","events_url":"https://api.github.com/users/julienstroheker/events{/privacy}","received_events_url":"https://api.github.com/users/julienstroheker/received_events","type":"User","site_admin":false},"body":"Please add an intro / context on what we gonna do during this task. Introduce Docker-Bench and Docker Inspect command","created_at":"2016-11-21T13:15:21Z","updated_at":"2016-11-21T13:30:21Z","html_url":"https://github.com/Microsoft/PartsUnlimitedMRP/pull/101#discussion_r88891175","pull_request_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/pulls/101","_links":{"self":{"href":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/pulls/comments/88891175"},"html":{"href":"https://github.com/Microsoft/PartsUnlimitedMRP/pull/101#discussion_r88891175"},"pull_request":{"href":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/pulls/101"}}},"pull_request":{"url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/pulls/101","id":94284598,"html_url":"https://github.com/Microsoft/PartsUnlimitedMRP/pull/101","diff_url":"https://github.com/Microsoft/PartsUnlimitedMRP/pull/101.diff","patch_url":"https://github.com/Microsoft/PartsUnlimitedMRP/pull/101.patch","issue_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/issues/101","number":101,"state":"open","locked":false,"title":"Deploy and use a Private Docker Registry in an application (Intergen)","user":{"login":"steven2000nz","id":13090919,"avatar_url":"https://avatars.githubusercontent.com/u/13090919?v=3","gravatar_id":"","url":"https://api.github.com/users/steven2000nz","html_url":"https://github.com/steven2000nz","followers_url":"https://api.github.com/users/steven2000nz/followers","following_url":"https://api.github.com/users/steven2000nz/following{/other_user}","gists_url":"https://api.github.com/users/steven2000nz/gists{/gist_id}","starred_url":"https://api.github.com/users/steven2000nz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/steven2000nz/subscriptions","organizations_url":"https://api.github.com/users/steven2000nz/orgs","repos_url":"https://api.github.com/users/steven2000nz/repos","events_url":"https://api.github.com/users/steven2000nz/events{/privacy}","received_events_url":"https://api.github.com/users/steven2000nz/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-11-18T01:03:02Z","updated_at":"2016-11-21T13:30:21Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e2e7b6c65e749678fa31bd1b87f7395cc7f88f2c","assignee":{"login":"julienstroheker","id":8661347,"avatar_url":"https://avatars.githubusercontent.com/u/8661347?v=3","gravatar_id":"","url":"https://api.github.com/users/julienstroheker","html_url":"https://github.com/julienstroheker","followers_url":"https://api.github.com/users/julienstroheker/followers","following_url":"https://api.github.com/users/julienstroheker/following{/other_user}","gists_url":"https://api.github.com/users/julienstroheker/gists{/gist_id}","starred_url":"https://api.github.com/users/julienstroheker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/julienstroheker/subscriptions","organizations_url":"https://api.github.com/users/julienstroheker/orgs","repos_url":"https://api.github.com/users/julienstroheker/repos","events_url":"https://api.github.com/users/julienstroheker/events{/privacy}","received_events_url":"https://api.github.com/users/julienstroheker/received_events","type":"User","site_admin":false},"assignees":[{"login":"julienstroheker","id":8661347,"avatar_url":"https://avatars.githubusercontent.com/u/8661347?v=3","gravatar_id":"","url":"https://api.github.com/users/julienstroheker","html_url":"https://github.com/julienstroheker","followers_url":"https://api.github.com/users/julienstroheker/followers","following_url":"https://api.github.com/users/julienstroheker/following{/other_user}","gists_url":"https://api.github.com/users/julienstroheker/gists{/gist_id}","starred_url":"https://api.github.com/users/julienstroheker/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/julienstroheker/subscriptions","organizations_url":"https://api.github.com/users/julienstroheker/orgs","repos_url":"https://api.github.com/users/julienstroheker/repos","events_url":"https://api.github.com/users/julienstroheker/events{/privacy}","received_events_url":"https://api.github.com/users/julienstroheker/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/pulls/101/commits","review_comments_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/pulls/101/comments","review_comment_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/issues/101/comments","statuses_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/statuses/72fa5fe3024aabcb4b60de6a2dcbefbd5561cae4","head":{"label":"Intergen-NZ:feature/deploy-private-docker-registry","ref":"feature/deploy-private-docker-registry","sha":"72fa5fe3024aabcb4b60de6a2dcbefbd5561cae4","user":{"login":"Intergen-NZ","id":17167744,"avatar_url":"https://avatars.githubusercontent.com/u/17167744?v=3","gravatar_id":"","url":"https://api.github.com/users/Intergen-NZ","html_url":"https://github.com/Intergen-NZ","followers_url":"https://api.github.com/users/Intergen-NZ/followers","following_url":"https://api.github.com/users/Intergen-NZ/following{/other_user}","gists_url":"https://api.github.com/users/Intergen-NZ/gists{/gist_id}","starred_url":"https://api.github.com/users/Intergen-NZ/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Intergen-NZ/subscriptions","organizations_url":"https://api.github.com/users/Intergen-NZ/orgs","repos_url":"https://api.github.com/users/Intergen-NZ/repos","events_url":"https://api.github.com/users/Intergen-NZ/events{/privacy}","received_events_url":"https://api.github.com/users/Intergen-NZ/received_events","type":"Organization","site_admin":false},"repo":{"id":70638190,"name":"PartsUnlimitedMRP","full_name":"Intergen-NZ/PartsUnlimitedMRP","owner":{"login":"Intergen-NZ","id":17167744,"avatar_url":"https://avatars.githubusercontent.com/u/17167744?v=3","gravatar_id":"","url":"https://api.github.com/users/Intergen-NZ","html_url":"https://github.com/Intergen-NZ","followers_url":"https://api.github.com/users/Intergen-NZ/followers","following_url":"https://api.github.com/users/Intergen-NZ/following{/other_user}","gists_url":"https://api.github.com/users/Intergen-NZ/gists{/gist_id}","starred_url":"https://api.github.com/users/Intergen-NZ/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Intergen-NZ/subscriptions","organizations_url":"https://api.github.com/users/Intergen-NZ/orgs","repos_url":"https://api.github.com/users/Intergen-NZ/repos","events_url":"https://api.github.com/users/Intergen-NZ/events{/privacy}","received_events_url":"https://api.github.com/users/Intergen-NZ/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Intergen-NZ/PartsUnlimitedMRP","description":"Parts Unlimited MRP is a fictional outsourced Manufacturing Resource Planning (MRP) application based on The Phoenix Project by Gene Kim, Kevin Behr and George Spafford. The application uses entirely open source software including Linux, Java, Apache, and MongoDB which creates a web front end, an order service, and an integration service.","fork":true,"url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP","forks_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/forks","keys_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/teams","hooks_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/hooks","issue_events_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/issues/events{/number}","events_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/events","assignees_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/assignees{/user}","branches_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/branches{/branch}","tags_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/tags","blobs_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/git/refs{/sha}","trees_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/statuses/{sha}","languages_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/languages","stargazers_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/stargazers","contributors_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/contributors","subscribers_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/subscribers","subscription_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/subscription","commits_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/commits{/sha}","git_commits_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/git/commits{/sha}","comments_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/comments{/number}","issue_comment_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/issues/comments{/number}","contents_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/contents/{+path}","compare_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/merges","archive_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/downloads","issues_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/issues{/number}","pulls_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/pulls{/number}","milestones_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/milestones{/number}","notifications_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/labels{/name}","releases_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/releases{/id}","deployments_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/deployments","created_at":"2016-10-11T21:48:19Z","updated_at":"2016-10-11T21:48:20Z","pushed_at":"2016-11-15T22:03:41Z","git_url":"git://github.com/Intergen-NZ/PartsUnlimitedMRP.git","ssh_url":"git@github.com:Intergen-NZ/PartsUnlimitedMRP.git","clone_url":"https://github.com/Intergen-NZ/PartsUnlimitedMRP.git","svn_url":"https://github.com/Intergen-NZ/PartsUnlimitedMRP","homepage":"","size":57541,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":4,"forks":0,"open_issues":4,"watchers":0,"default_branch":"master"}},"base":{"label":"Microsoft:master","ref":"master","sha":"b14fd6932e44860a7bd780a84e7de3ce102f2726","user":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars.githubusercontent.com/u/6154722?v=3","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"repo":{"id":34739600,"name":"PartsUnlimitedMRP","full_name":"Microsoft/PartsUnlimitedMRP","owner":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars.githubusercontent.com/u/6154722?v=3","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Microsoft/PartsUnlimitedMRP","description":"Parts Unlimited MRP is a fictional outsourced Manufacturing Resource Planning (MRP) application based on The Phoenix Project by Gene Kim, Kevin Behr and George Spafford. The application uses entirely open source software including Linux, Java, Apache, and MongoDB which creates a web front end, an order service, and an integration service.","fork":false,"url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP","forks_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/forks","keys_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/teams","hooks_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/hooks","issue_events_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/issues/events{/number}","events_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/events","assignees_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/assignees{/user}","branches_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/branches{/branch}","tags_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/tags","blobs_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/git/refs{/sha}","trees_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/statuses/{sha}","languages_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/languages","stargazers_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/stargazers","contributors_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/contributors","subscribers_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/subscribers","subscription_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/subscription","commits_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/commits{/sha}","git_commits_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/git/commits{/sha}","comments_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/comments{/number}","issue_comment_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/issues/comments{/number}","contents_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/contents/{+path}","compare_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/merges","archive_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/downloads","issues_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/issues{/number}","pulls_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/pulls{/number}","milestones_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/milestones{/number}","notifications_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/labels{/name}","releases_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/releases{/id}","deployments_url":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/deployments","created_at":"2015-04-28T15:40:26Z","updated_at":"2016-11-11T02:53:28Z","pushed_at":"2016-11-18T01:05:35Z","git_url":"git://github.com/Microsoft/PartsUnlimitedMRP.git","ssh_url":"git@github.com:Microsoft/PartsUnlimitedMRP.git","clone_url":"https://github.com/Microsoft/PartsUnlimitedMRP.git","svn_url":"https://github.com/Microsoft/PartsUnlimitedMRP","homepage":"","size":55241,"stargazers_count":57,"watchers_count":57,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":58,"mirror_url":null,"open_issues_count":4,"forks":58,"open_issues":4,"watchers":57,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/pulls/101"},"html":{"href":"https://github.com/Microsoft/PartsUnlimitedMRP/pull/101"},"issue":{"href":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/issues/101"},"comments":{"href":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/issues/101/comments"},"review_comments":{"href":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/pulls/101/comments"},"review_comment":{"href":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/pulls/101/commits"},"statuses":{"href":"https://api.github.com/repos/Microsoft/PartsUnlimitedMRP/statuses/72fa5fe3024aabcb4b60de6a2dcbefbd5561cae4"}}}}
{"actor":{"display_login":"julienstroheker"}}